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