Sobes.tech
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".