Middle
Mis on middleware?
sobes.tech AI
Vastus AI-lt
Keskkihilise tarkvara kiht (middleware) on tarkvara kiht või raamistik, mis töötleb sisenevaid HTTP-päringuid enne, kui need jõuavad lõplikku töötlejani (näiteks kontroller) ja väljaminevaid HTTP-vastuseid pärast töötlemist. See täidab erinevaid tegevusi: autentimine, autoriseerimine, logimine, päringu/vastuse muutmine jne. Middleware'id moodustavad tavaliselt torujuhtme (pipeline), kus iga middleware täidab oma funktsiooni ja edastab päringu järgmisele või lõplikule töötlejale.
Näide PHP-s (kasutades 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
{
// Kasutaja autentimise kontroll
if (!$this->isAuthenticated($request)) {
// Kui ei ole autentitud, tagasta viga
return new \Slim\Psr7\Response(401); // Näide PSR-7 vastusest
}
// Kui on autentitud, edasta päring järgmisele töötlejale
return $handler->handle($request);
}
private function isAuthenticated(ServerRequestInterface $request): bool
{
// Kontrolli loogika (näiteks päise, sessiooni jms järgi)
return true; // Asenda tegeliku loogikaga
}
}
class LoggingMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// Logi teave päringu kohta enne töötlemist
$method = $request->getMethod();
$uri = (string) $request->getUri();
error_log("Handling request: $method $uri");
// Edasta päring järgmisele töötlejale ja saa vastus
$response = $handler->handle($request);
// Logi teave vastuse kohta pärast töötlemist
$statusCode = $response->getStatusCode();
error_log("Response status: $statusCode");
// Tagasta vastus
return $response;
}
}
// Näide kasutamisest marsruutijas
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());
Middleware'id võimaldavad jagada päringu töötlemise loogikat, muutes koodi modulaarsemaks, taaskasutatavaks ja lihtsamini testitavaks. Nad järgivad "ühe vastutuse" põhimõtet.