Middle
Czym jest middleware?
sobes.tech AI
Odpowiedź od AI
Middleware (pośrednie oprogramowanie) to warstwa oprogramowania lub framework, który przetwarza przychodzące żądania HTTP przed dotarciem do końcowego obsługi (np. kontrolera) oraz odpowiedzi HTTP po przetworzeniu. Wykonuje różne działania: uwierzytelnianie, autoryzację, logowanie, modyfikację żądania/odpowiedzi itp. Middleware zwykle tworzy pipeline, w którym każdy middleware wykonuje swoją funkcję i przekazuje żądanie do następnego lub do końcowego obsługi.
Przykład w PHP (z użyciem 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
{
// Sprawdzenie uwierzytelnienia użytkownika
if (!$this->isAuthenticated($request)) {
// Jeśli użytkownik nie jest uwierzytelniony, zwróć błąd
return new \Slim\Psr7\Response(401); // Przykład tworzenia odpowiedzi PSR-7
}
// Jeśli użytkownik jest uwierzytelniony, przekazuje żądanie do następnego obsługi
return $handler->handle($request);
}
private function isAuthenticated(ServerRequestInterface $request): bool
{
// Logika sprawdzania uwierzytelnienia (np. nagłówki, sesja itp.)
return true; // Podpowiedź
}
}
class LoggingMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// Logowanie informacji o żądaniu przed jego obsługą
$method = $request->getMethod();
$uri = (string) $request->getUri();
error_log("Handling request: $method $uri");
// Przekazanie żądania do następnego obsługi i uzyskanie odpowiedzi
$response = $handler->handle($request);
// Logowanie informacji o odpowiedzi po obsłudze
$statusCode = $response->getStatusCode();
error_log("Response status: $statusCode");
// Zwracanie odpowiedzi
return $response;
}
}
// Przykład użycia w routerze (uproszczony)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());
Middleware pozwalają na dekompozycję logiki obsługi żądań, czyniąc kod bardziej modułowym, wielokrotnego użytku i łatwym do testowania. Podążają za zasadą "jednej odpowiedzialności".