Sobes.tech
Middle

Mis on middleware?

sobes.tech AI

Vastus AI-lt

Keskkihilise tarkvara kiht (middleware) on tarkvara kiht või raamistik, mis töötleb sisenevaid HTTP-päringuid enne, kui need jõuavad lõplikku töötlejani (näiteks kontroller) ja väljaminevaid HTTP-vastuseid pärast töötlemist. See täidab erinevaid tegevusi: autentimine, autoriseerimine, logimine, päringu/vastuse muutmine jne. Middleware'id moodustavad tavaliselt torujuhtme (pipeline), kus iga middleware täidab oma funktsiooni ja edastab päringu järgmisele või lõplikule töötlejale.

Näide PHP-s (kasutades 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
    {
        // Kasutaja autentimise kontroll
        if (!$this->isAuthenticated($request)) {
            // Kui ei ole autentitud, tagasta viga
            return new \Slim\Psr7\Response(401); // Näide PSR-7 vastusest
        }

        // Kui on autentitud, edasta päring järgmisele töötlejale
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Kontrolli loogika (näiteks päise, sessiooni jms järgi)
        return true; // Asenda tegeliku loogikaga
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Logi teave päringu kohta enne töötlemist
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Edasta päring järgmisele töötlejale ja saa vastus
        $response = $handler->handle($request);

        // Logi teave vastuse kohta pärast töötlemist
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Tagasta vastus
        return $response;
    }
}

// Näide kasutamisest marsruutijas
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middleware'id võimaldavad jagada päringu töötlemise loogikat, muutes koodi modulaarsemaks, taaskasutatavaks ja lihtsamini testitavaks. Nad järgivad "ühe vastutuse" põhimõtet.