Middle
Co je middleware?
sobes.tech AI
Odpověď od AI
Middleware (prostřední software) je vrstva softwaru nebo rámec, který zpracovává příchozí HTTP požadavky před tím, než dorazí k finálnímu zpracovateli (například kontroléru), a odchozí HTTP odpovědi po zpracování. Provádí různé akce: autentizaci, autorizaci, logování, modifikaci požadavku/odpovědi atd. Middleware obvykle tvoří pipeline, kde každý middleware plní svou funkci a předává požadavek dalšímu nebo finálnímu zpracovateli.
Příklad v PHP (s použitím 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
{
// Kontrola autentizace uživatele
if (!$this->isAuthenticated($request)) {
// Pokud není autentizován, vrátí chybu
return new \Slim\Psr7\Response(401); // Příklad vytvoření PSR-7 odpovědi
}
// Pokud je autentizován, předá požadavek dalšímu zpracovateli
return $handler->handle($request);
}
private function isAuthenticated(ServerRequestInterface $request): bool
{
// Logika kontroly autentizace (například hlavičky, session apod.)
return true; // Zástupný
}
}
class LoggingMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// Logování informací o požadavku před jeho zpracováním
$method = $request->getMethod();
$uri = (string) $request->getUri();
error_log("Handling request: $method $uri");
// Předání požadavku dalšímu zpracovateli a získání odpovědi
$response = $handler->handle($request);
// Logování informací o odpovědi po zpracování
$statusCode = $response->getStatusCode();
error_log("Response status: $statusCode");
// Vrácení odpovědi
return $response;
}
}
// Příklad použití v routeru (zjednodušené)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());
Middleware umožňuje rozdělit logiku zpracování požadavků, čímž je kód modulárnější, znovu použitelnější a snadněji testovatelný. Dodržují princip "jediné odpovědnosti".