Sobes.tech
Middle

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.