Sobes.tech
Middle

Ի՞նչ է middleware-ը։

sobes.tech AI

Պատասխան AI-ից

Միջանկյալ ծրագրային ապահովում (middleware) — դա ծրագրային շերտ կամ շրջանակ է, որը մշակվում է մուտքային HTTP հարցումները նախքան հասնել վերջնական մշակողին (օրինակ՝ կոնտրոլեր), և արտահոսքային HTTP պատասխանները՝ մշակելուց հետո։ Այն կատարում է տարբեր գործողություններ՝ հաստատում, թույլտվություն, գրանցում, հարցման/պատասխանի փոփոխում և այլն։ Middleware-ները սովորաբար կազմում են կոնվեյեր (pipeline), որտեղ յուրաքանչյուր middleware իր գործառույթը կատարում է և փոխանցում հարցումը հաջորդին կամ վերջնական մշակողին:

PHP-ում օրինակ (օգտագործելով 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
    {
        // Օգտատիրոջ հաստատման ստուգում
        if (!$this->isAuthenticated($request)) {
            // Եթե չի հաստատված, վերադարձնում ենք սխալ
            return new \Slim\Psr7\Response(401); // PSR-7 պատասխան ստեղծելու օրինակ
        }

        // Եթե հաստատված է, փոխանցում ենք հարցումը հաջորդին
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Ստուգման տրամաբանություն (օրինակ՝ վերնագրով, սեսիայով և այլն)
        return true; // Օգտագործում է placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Գրանցում հարցման մասին տեղեկատվություն
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Հարցումը փոխանցում ենք հաջորդին և ստանում պատասխան
        $response = $handler->handle($request);

        // Գրանցում պատասխանին մասին տեղեկատվություն
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Վերադարձնում ենք պատասխան
        return $response;
    }
}

// Օրինակ օգտագործում ռոուտերում (պարզեցված)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middleware-ները թույլ են տալիս դեկոմպոզիցիա իրականացնել հարցումների մշակման տրամաբանության մեջ, դարձնելով կոդը ավելի մոդուլային, վերօգտագործելի և հեշտ թեստավորվող։ Նրանք հետևում են "մեկ պատասխանատվության" սկզբունքին։