Middle
Šta je middleware?
sobes.tech АИ
Одговор од АИ
Межумјесни софтвер (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; // Заглушка
}
}
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-и омогућавају декомпозицију логике обраде захтева, чинећи код модуларнијим, поновно коришћеним и лакшим за тестирање. Они следе принцип "једна одговорност".