Sobes.tech
Middle

Čo je middleware?

sobes.tech AI

Odpoveď od AI

Medzikrokové softvérové (middleware) je vrstva softvéru alebo rámec, ktorý spracováva prichádzajúce HTTP požiadavky predtým, ako dosiahnu konečného spracovateľa (napríklad kontrolér), a odchádzajúce HTTP odpovede po spracovaní. Vykonáva rôzne akcie: overovanie, autorizáciu, logovanie, modifikáciu požiadavky/odpovede atď. Middlewarey zvyčajne tvoria reťazec (pipeline), kde každý middleware vykonáva svoju funkciu a odovzdáva požiadavku ďalšiemu alebo konečnému spracovateľovi.

Príklad v PHP (s použitím 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
    {
        // Kontrola autentifikácie používateľa
        if (!$this->isAuthenticated($request)) {
            // Ak používateľ nie je autentifikovaný, vrátime chybu
            return new \Slim\Psr7\Response(401); // Príklad vytvorenia PSR-7 odpovede
        }

        // Ak je používateľ autentifikovaný, odovzdáme požiadavku ďalšiemu spracovateľovi
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Logika kontroly autentifikácie (napríklad podľa hlavičky, relácie atď.)
        return true; // Zástupná hodnota
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Logovanie informácií o požiadavke pred jej spracovaním
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Odovzdanie požiadavky ďalšiemu spracovateľovi a získanie odpovede
        $response = $handler->handle($request);

        // Logovanie informácií o odpovedi po spracovaní
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Vrátenie odpovede
        return $response;
    }
}

// Príklad použitia v routeri (zjednodušene)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middlewarey umožňujú dekompozíciu logiky spracovania požiadaviek, čím robia kód modulárnejším, znovu použiteľnejším a ľahšie testovateľným. Sledujú princíp "jednotnej zodpovednosti".