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".