Sobes.tech
Middle

Qu'est-ce que le middleware?

sobes.tech IA

Réponse de l'IA

Le middleware (logiciel intermédiaire) est une couche de logiciel ou un cadre qui traite les requêtes HTTP entrantes avant qu'elles n'atteignent le gestionnaire final (par exemple, un contrôleur), et les réponses HTTP sortantes après traitement. Il effectue diverses actions : authentification, autorisation, journalisation, modification de la requête/réponse, etc. Les middlewares forment généralement une pipeline, où chaque middleware remplit sa fonction et transmet la requête au suivant ou au gestionnaire final.

Exemple en PHP (utilisant PSR-7/PSR-15) :

<?php

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class AuthenticationMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Vérification de l'authentification de l'utilisateur
        if (!$this->isAuthenticated($request)) {
            // Si l'utilisateur n'est pas authentifié, retourner une erreur
            return new \Slim\Psr7\Response(401); // Exemple de création de réponse PSR-7
        }

        // Si l'utilisateur est authentifié, passer la requête au gestionnaire suivant
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Logique de vérification de l'authentification (par exemple, en-têtes, session, etc.)
        return true; // Placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Journaliser les informations sur la requête avant traitement
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Passer la requête au gestionnaire suivant et obtenir la réponse
        $response = $handler->handle($request);

        // Journaliser les informations sur la réponse après traitement
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Retourner la réponse
        return $response;
    }
}

// Exemple d'utilisation dans un routeur (simplifié)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Les middlewares permettent de décomposer la logique de traitement des requêtes, rendant le code plus modulaire, réutilisable et facilement testable. Ils suivent le principe de "responsabilité unique".