Sobes.tech
Middle

Middleware nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Aralıq proqram təminatı (middleware) — bu, daxil olan HTTP sorğularını son işləyiciyə (məsələn, controller) çatmadan əvvəl və işləmə sonrası çıxan HTTP cavablarını emal edən proqram və ya çərçivədir. O, müxtəlif fəaliyyətləri yerinə yetirir: autentifikasiya, icazə, qeydiyyat, sorğu/cavabın dəyişdirilməsi və s. Middlewares adətən pipeline (boru xətti) şəklində qurulur, burada hər middleware öz funksiyasını yerinə yetirir və sorğunu növbəti və ya son işləyiciyə ötürür.

PHP-də nümunə (PSR-7/PSR-15 istifadə etməklə):

<?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
    {
        // İstifadəçinin autentifikasiyasını yoxlama
        if (!$this->isAuthenticated($request)) {
            // Əgər istifadəçi autentifikasiya olunmayıbsa, xəta qaytar
            return new \Slim\Psr7\Response(401); // PSR-7 cavab nümunəsi
        }

        // Əgər istifadəçi autentifikasiya olunubsa, sorğunu növbəti işləyiciyə ötür
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Autentifikasiya yoxlaması üçün məntiq (məsələn, başlıqlar, sessiya və s.)
        return true; // Yerləşdirici
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Sorğu işlənməzdən əvvəl məlumatların qeydiyyatı
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Sorğunu növbəti işləyiciyə ötür və cavabı al
        $response = $handler->handle($request);

        // İşləmə sonrası cavab haqqında məlumatların qeydiyyatı
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Cavabı qaytar
        return $response;
    }
}

// Router-də istifadə nümunəsi (sadələşdirilmiş)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middleware-lər sorğu emalı məntiqini bölməyə imkan verir, kodu daha modulyar, təkrar istifadə edilə bilən və sınaqdan keçirməyi asanlaşdırır. Onlar "tək məsuliyyət" prinsipinə əməl edir.