Sobes.tech
Middle

Wat is middleware?

sobes.tech AI

Antwoord van AI

Middleware (tussensoftware) is een laag software of framework die inkomende HTTP-verzoeken verwerkt voordat ze bij de uiteindelijke handler (bijvoorbeeld controller) komen, en uitgaande HTTP-antwoorden na verwerking. Het voert verschillende acties uit: authenticatie, autorisatie, logging, wijziging van verzoek/antwoord, enzovoort. Middleware vormen meestal een pipeline, waarbij elke middleware zijn functie vervult en het verzoek doorgeeft aan de volgende of aan de uiteindelijke handler.

Voorbeeld in PHP (met 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
    {
        // Verificatie van gebruiker
        if (!$this->isAuthenticated($request)) {
            // Als gebruiker niet geauthenticeerd is, geef fout
            return new \Slim\Psr7\Response(401); // Voorbeeld van PSR-7 antwoord
        }

        // Als geauthenticeerd, geef verzoek door aan volgende handler
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Logica voor verificatie (bijvoorbeeld headers, sessie, enz.)
        return true; // Placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Log informatie over verzoek voor verwerking
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Verzoek doorgeven en antwoord krijgen
        $response = $handler->handle($request);

        // Log informatie over antwoord na verwerking
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Antwoord teruggeven
        return $response;
    }
}

// Voorbeeld in router (vereenvoudigd)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middleware maakt het mogelijk om de verwerkingslogica van verzoeken te decomponeren, waardoor de code modulairder, herbruikbaarder en gemakkelijker te testen wordt. Ze volgen het principe van "enkele verantwoordelijkheid".