Middleware nima?
sobes.tech AI
AIdan javob
Orali dasturiy ta'minoti (middleware) — bu kiruvchi HTTP so'rovlarini yakuniy ishlovchiga (masalan, controller) yetib borishidan oldin va undan keyin chiqadigan HTTP javoblarini qayta ishlovchi dastur yoki ramka. U turli harakatlarni bajaradi: autentifikatsiya, ruxsat berish, log yozish, so'rov/javobni o'zgartirish va boshqalar. Middlewares odatda pipeline (quvur) shaklida bo'ladi, har bir middleware o'z funksiyasini bajaradi va so'rovni keyingisiga yoki yakuniy ishlovchiga o'tkazadi.
PHPda misol (PSR-7/PSR-15 bilan):
<?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
{
// Foydalanuvchi autentifikatsiyasini tekshirish
if (!$this->isAuthenticated($request)) {
// Agar foydalanuvchi autentifikatsiyadan o'tmagan bo'lsa, xato qaytarish
return new \Slim\Psr7\Response(401); // PSR-7 javob yaratish misoli
}
// Agar foydalanuvchi autentifikatsiyadan o'tgan bo'lsa, so'rovni keyingi ishlovchiga o'tkazish
return $handler->handle($request);
}
private function isAuthenticated(ServerRequestInterface $request): bool
{
// Autentifikatsiya tekshiruvi logikasi (masalan, headerlar, sessiya va boshqalar)
return true; // Placeholder
}
}
class LoggingMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// So'rovni ishlashdan oldin ma'lumotlarni log qilish
$method = $request->getMethod();
$uri = (string) $request->getUri();
error_log("Handling request: $method $uri");
// So'rovni keyingi ishlovchiga o'tkazish va javobni olish
$response = $handler->handle($request);
// Javobdan keyin ma'lumotlarni log qilish
$statusCode = $response->getStatusCode();
error_log("Response status: $statusCode");
// Javobni qaytarish
return $response;
}
}
// Routerda foydalanish misoli (soddalashtirilgan)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());
Middlewarelar so'rovlarni qayta ishlash mantiqini bo'laklarga ajratishga imkon beradi, bu kodni modulli, qayta ishlatiladigan va test qilishni osonlashtiradi. Ular "bir mas'uliyat" prinsipiga amal qiladi.