Sobes.tech
Middle

Ce este middleware-ul?

sobes.tech AI

Răspuns de la AI

Middleware (software intermediar) este un strat de software sau un cadru care procesează cererile HTTP de intrare înainte ca acestea să ajungă la handler-ul final (de exemplu, controllerul), și răspunsurile HTTP de ieșire după procesare. Acesta efectuează diverse acțiuni: autentificare, autorizare, jurnalizare, modificarea cererii/răspunsului etc. Middleware-urile formează de obicei un pipeline, unde fiecare middleware își îndeplinește funcția și transmite cererea următorului sau handler-ului final.

Exemplu în PHP (folosind 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
    {
        // Verificarea autentificării utilizatorului
        if (!$this->isAuthenticated($request)) {
            // Dacă utilizatorul nu este autentificat, returnează o eroare
            return new \Slim\Psr7\Response(401); // Exemplu de creare a unui răspuns PSR-7
        }

        // Dacă utilizatorul este autentificat, transmite cererea către următorul handler
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Logica de verificare a autentificării (de exemplu, anteturi, sesiuni etc.)
        return true; // Placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Înregistrarea informațiilor despre cerere înainte de procesare
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Transmiterea cererii către următorul handler și obținerea răspunsului
        $response = $handler->handle($request);

        // Înregistrarea informațiilor despre răspuns după procesare
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Returnarea răspunsului
        return $response;
    }
}

// Exemplu de utilizare în router (simplificat)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middleware-urile permit decompozitia logicii de procesare a cererilor, făcând codul mai modular, reutilizabil și ușor de testat. Ele urmează principiul "single responsibility".