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