Mi az a middleware?
sobes.tech MI
Válasz az MI-től
A köztes szoftver (middleware) egy szoftverréteg vagy keretrendszer, amely bejövő HTTP-kéréseket dolgoz fel, mielőtt azok elérnék a végső kezelőt (például vezérlőt), és kimenő HTTP-válaszokat a feldolgozás után. Különféle műveleteket végez: hitelesítés, jogosultságkezelés, naplózás, kérés/válasz módosítása stb. A middleware-ek általában egy csővezeték (pipeline) formájában épülnek fel, ahol minden middleware végrehajtja a saját funkcióját, és továbbítja a kérést a következő vagy a végső kezelőnek.
Példa PHP-ben (PSR-7/PSR-15 használatával):
<?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
{
// Felhasználói hitelesítés ellenőrzése
if (!$this->isAuthenticated($request)) {
// Ha a felhasználó nem hitelesített, hibát ad vissza
return new \Slim\Psr7\Response(401); // PSR-7 válasz példája
}
// Ha hitelesített, továbbítja a kérést a következő kezelőnek
return $handler->handle($request);
}
private function isAuthenticated(ServerRequestInterface $request): bool
{
// Hitelesítés ellenőrzési logika (pl. fejléc, munkamenet stb.)
return true; // helykitöltő
}
}
class LoggingMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// A kérés információinak naplózása az feldolgozás előtt
$method = $request->getMethod();
$uri = (string) $request->getUri();
error_log("Handling request: $method $uri");
// A kérés továbbítása a következő kezelőnek és a válasz beszerzése
$response = $handler->handle($request);
// A válasz információinak naplózása feldolgozás után
$statusCode = $response->getStatusCode();
error_log("Response status: $statusCode");
// A válasz visszaadása
return $response;
}
}
// Példa routerben való használatra (egyszerűsített)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());
A middleware-ek lehetővé teszik a kérésfeldolgozási logika szétválasztását, így a kód modulárisabbá, újrahasznosíthatóbbá és könnyebben tesztelhetővé válik. Követik az "egyedi felelősség" elvét.