Middle
Kas ir middleware?
sobes.tech AI
Atbilde no AI
Starpprogrammatūras slānis (middleware) ir programmatūras vai ietvara slānis, kas apstrādā ienākošos HTTP pieprasījumus pirms tie sasniedz galīgo apstrādātāju (piemēram, kontrolieri), un izejošos HTTP atbildes pēc apstrādes. Tas veic dažādas darbības: autentifikāciju, autorizāciju, žurnālu reģistrēšanu, pieprasījuma/atbildes modifikāciju utt. Middleware parasti veido cauruļvadu (pipeline), kur katrs middleware veic savu funkciju un nodod pieprasījumu nākamajam vai galīgajam apstrādātājam.
Piemērs PHP valodā (izmantojot 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
{
// Lietotāja autentifikācijas pārbaude
if (!$this->isAuthenticated($request)) {
// Ja nav autentificēts, atgriež kļūdu
return new \Slim\Psr7\Response(401); // PSR-7 atbildes piemērs
}
// Ja ir autentificēts, nodod pieprasījumu nākamajam apstrādātājam
return $handler->handle($request);
}
private function isAuthenticated(ServerRequestInterface $request): bool
{
// Pārbaudes loģika (piemēram, pēc galvenes, sesijas utt.)
return true; // Aizstāj ar reālu loģiku
}
}
class LoggingMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// Žurnāla ieraksts par pieprasījumu pirms tā apstrādes
$method = $request->getMethod();
$uri = (string) $request->getUri();
error_log("Handling request: $method $uri");
// Pieprasījuma nodošana nākamajam apstrādātājam un atbildes saņemšana
$response = $handler->handle($request);
// Žurnāla ieraksts par atbildi pēc apstrādes
$statusCode = $response->getStatusCode();
error_log("Response status: $statusCode");
// Atgriezt atbildi
return $response;
}
}
// Piemērs izmantošanai maršrutētājā
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());
Middleware ļauj sadalīt pieprasījumu apstrādes loģiku, padarot kodu modulārāku, atkārtoti izmantojamu un vieglāk testējamu. Tie seko "vienas atbildības" principam.