Sobes.tech
Middle

Tətbiqlərdə middleware nə üçün istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Veb tətbiqlərində middleware HTTP sorğuları və cavablarını emal edən vasitə proqram təminatıdır. Bu, veb server və tətbiqin əsas məntiqi arasında yerləşir.

Middleware-in əsas vəzifələri:

  • Sorğunun əvvəlki emalı:
    • İstifadəçinin autentifikasiyası və icazəsi.
    • Gələn sorğu məlumatlarının (JSON, XML və s.) təhlili.
    • Sorğu məlumatlarının doğrulanması.
    • Sorğuların qeydiyyatı.
    • Sorğuya başlıqların əlavə olunması.
  • Cavabın sonrakı emalı:
    • Cavabın müştəriyə göndərilmədən əvvəl dəyişdirilməsi (məsələn, başlıqların əlavə olunması).
    • Cavabın sıxlaşdırılması.
    • Xəta idarəetməsi (istisnalar).
  • İcra axınının idarə olunması: Middleware sorğunun emalını dayandıra və erkən mərhələdə cavab qaytara bilər (məsələn, giriş icazələri yoxdursa).

Middleware-dən istifadə etməyin üstünlükləri:

  • Modullarlıq: Tapşırıqların müstəqil və yenidən istifadə edilə bilən komponentlərə bölünməsi.
  • Əlçatanlıq: Əsas tətbiq məntiqini dəyişmədən funksionallığı asanlıqla əlavə etmək və ya çıxarmaq.
  • Kodun oxunaqlığı: Ümumi əməliyyatların ayrılması ilə tətbiqin quruluşunun yaxşılaşdırılması.
  • Test ediləbilərlik: Fərdi middleware-lər izolyasiya olunaraq daha asan test edilə bilər.

PHP çərçivələrində (Laravel, Symfony, Slim kimi) middleware tez-tez müəyyən interfeysi həyata keçirən sinflər şəklində tətbiq edilir.

<?php

// Middleware strukturunun nümunəsi (interfeys)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// Middleware-nin nümunəsi (kimlik doğrulama)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // Kimlik doğrulama yoxlaması
        if (!isAuthenticated()) {
            // Əgər istifadəçi autentifikasiya olunmayıbsa, icra dayandırılır və xəta qaytarılır
            return new Response(401, [], 'Unauthorized');
        }

        // Əgər hər şey qaydasındadırsa, sorğunu növbəti işləyiciyə (və ya əsas məntiqə) ötürür
        return $this->nextHandler->handle($request);
    }
}