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-ები საშუალებას აძლევენ მოთხოვნის დამუშავების ლოგიკის დეკომპოზიციას, რაც კოდს უფრო მოდულურს, გადამეორებელს და მარტივს ხდის ტესტირებისთვის. ისინი მიჰყვებიან "ერთად პასუხისმგებლობის" პრინციპს.