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);
}
}