Sobes.tech
Middle

Cos'è il middleware?

sobes.tech AI

Risposta dell'AI

Il middleware (software intermedio) è uno strato di software o framework che elabora le richieste HTTP in ingresso prima che raggiungano il gestore finale (ad esempio, un controller), e le risposte HTTP in uscita dopo l'elaborazione. Esegue diverse azioni: autenticazione, autorizzazione, logging, modifica della richiesta/risposta, ecc. I middleware formano generalmente una pipeline, in cui ogni middleware svolge la propria funzione e passa la richiesta al successivo o al gestore finale.

Esempio in PHP (utilizzando 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
    {
        // Verifica dell'autenticazione dell'utente
        if (!$this->isAuthenticated($request)) {
            // Se l'utente non è autenticato, restituisce errore
            return new \Slim\Psr7\Response(401); // Esempio di creazione di risposta PSR-7
        }

        // Se l'utente è autenticato, passa la richiesta al prossimo gestore
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Logica di verifica dell'autenticazione (ad esempio, intestazioni, sessione, ecc.)
        return true; // Placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Log delle informazioni sulla richiesta prima dell'elaborazione
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Passa la richiesta al prossimo gestore e ottieni la risposta
        $response = $handler->handle($request);

        // Log delle informazioni sulla risposta dopo l'elaborazione
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Restituisce la risposta
        return $response;
    }
}

// Esempio di utilizzo nel router (semplificato)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

I middleware consentono di decomporre la logica di elaborazione delle richieste, rendendo il codice più modulare, riutilizzabile e facilmente testabile. Seguono il principio di "responsabilità singola".