Sobes.tech
Middle

Kas ir middleware?

sobes.tech AI

Atbilde no AI

Starpprogrammatūras slānis (middleware) ir programmatūras vai ietvara slānis, kas apstrādā ienākošos HTTP pieprasījumus pirms tie sasniedz galīgo apstrādātāju (piemēram, kontrolieri), un izejošos HTTP atbildes pēc apstrādes. Tas veic dažādas darbības: autentifikāciju, autorizāciju, žurnālu reģistrēšanu, pieprasījuma/atbildes modifikāciju utt. Middleware parasti veido cauruļvadu (pipeline), kur katrs middleware veic savu funkciju un nodod pieprasījumu nākamajam vai galīgajam apstrādātājam.

Piemērs PHP valodā (izmantojot 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
    {
        // Lietotāja autentifikācijas pārbaude
        if (!$this->isAuthenticated($request)) {
            // Ja nav autentificēts, atgriež kļūdu
            return new \Slim\Psr7\Response(401); // PSR-7 atbildes piemērs
        }

        // Ja ir autentificēts, nodod pieprasījumu nākamajam apstrādātājam
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Pārbaudes loģika (piemēram, pēc galvenes, sesijas utt.)
        return true; // Aizstāj ar reālu loģiku
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Žurnāla ieraksts par pieprasījumu pirms tā apstrādes
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Pieprasījuma nodošana nākamajam apstrādātājam un atbildes saņemšana
        $response = $handler->handle($request);

        // Žurnāla ieraksts par atbildi pēc apstrādes
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Atgriezt atbildi
        return $response;
    }
}

// Piemērs izmantošanai maršrutētājā
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middleware ļauj sadalīt pieprasījumu apstrādes loģiku, padarot kodu modulārāku, atkārtoti izmantojamu un vieglāk testējamu. Tie seko "vienas atbildības" principam.