Kas yra middleware?
sobes.tech AI
Atsakymas iš AI
Tarpinis programinės įrangos sluoksnis (middleware) yra programinės įrangos arba karkaso sluoksnis, kuris apdoroja įeinančius HTTP užklausimus iki jų pasiekimo galutinio apdorotojo (pvz., kontrolerio) ir išeinančius HTTP atsakymus po apdorojimo. Jis atlieka įvairius veiksmus: autentifikavimą, autorizaciją, žurnalų rašymą, užklausos/atsakymo modifikavimą ir kt. Middleware paprastai sudaro vamzdyną (pipeline), kur kiekvienas middleware atlieka savo funkciją ir perduoda užklausą kitam arba galutiniam apdorotojui.
Pavyzdys PHP kalba (naudojant 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
{
// Vartotojo autentifikacijos patikrinimas
if (!$this->isAuthenticated($request)) {
// Jei vartotojas nepatvirtintas, grąžinti klaidą
return new \Slim\Psr7\Response(401); // PSR-7 atsakymo pavyzdys
}
// Jei vartotojas patvirtintas, perduoti užklausą kitam apdorotojui
return $handler->handle($request);
}
private function isAuthenticated(ServerRequestInterface $request): bool
{
// Patikros logika (pvz., antraštėje, seanse ir kt.)
return true; // Pakeisti tikru logika
}
}
class LoggingMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// Užklausos informacijos žurnalo įrašymas prieš apdorojimą
$method = $request->getMethod();
$uri = (string) $request->getUri();
error_log("Handling request: $method $uri");
// Užklausos perdavimas kitam apdorotojui ir atsakymo gavimas
$response = $handler->handle($request);
// Atsakymo informacijos žurnalo įrašymas po apdorojimo
$statusCode = $response->getStatusCode();
error_log("Response status: $statusCode");
// Atsakymo grąžinimas
return $response;
}
}
// Pavyzdys naudojimo maršrutizatoriuje
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());
Middleware leidžia suskirstyti užklausų apdorojimo logiką, padaro kodą moduliškesnį, pakartotinai naudojamą ir lengvai testuojamą. Jie seka "vienos atsakomybės" principą.