Sobes.tech
Middle

Uygulamalarda middleware ne işe yarar?

sobes.tech yapay zeka

AI'dan gelen yanıt

Web uygulamalarında Middleware, HTTP isteklerini ve yanıtlarını işleyen ara yazılımdır. Web sunucusu ile uygulamanın ana mantığı arasında bulunur.

Middleware'in temel görevleri:

  • İsteğin ön işlenmesi:
    • Kullanıcının kimlik doğrulaması ve yetkilendirmesi.
    • Gelen istek verilerinin (JSON, XML vb.) ayrıştırılması.
    • İstek verilerinin doğrulanması.
    • İsteklerin kaydedilmesi.
    • İsteğe başlıklar eklenmesi.
  • Yanıtın sonrası işlenmesi:
    • Yanıtın, müşteriye gönderilmeden önce değiştirilmesi (örneğin, başlıkların eklenmesi).
    • Yanıtın sıkıştırılması.
    • Hata yönetimi (istisnalar).
  • İş akışının yönetimi: Middleware, isteğin işlenmesini durdurabilir ve erken bir aşamada yanıt dönebilir (örneğin, erişim izinleri yoksa).

Middleware kullanmanın avantajları:

  • Modülerlik: Görevlerin bağımsız ve yeniden kullanılabilir bileşenlere bölünmesi.
  • Esneklik: Ana uygulama mantığını değiştirmeden fonksiyonellik ekleme veya kaldırma.
  • Kod okunabilirliği: Ortak işlemlerin ayrılmasıyla uygulama yapısının iyileştirilmesi.
  • Test edilebilirlik: Bireysel middleware'ler izole edilerek daha kolay test edilebilir.

PHP framework'lerinde (Laravel, Symfony, Slim gibi) middleware genellikle belirli bir arayüzü uygulayan sınıflar şeklinde gerçekleştirilir.

<?php

// Middleware yapısına örnek (arayüz)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// Middleware örneği (kimlik doğrulama)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // Kimlik doğrulama kontrolü
        if (!isAuthenticated()) {
            // Kullanıcı kimliği doğrulanmamışsa, işlemi durdurur ve hata döner
            return new Response(401, [], 'Unauthorized');
        }

        // Her şey yolundaysa, isteği bir sonraki işleyiciye (veya ana mantığa) iletir
        return $this->nextHandler->handle($request);
    }
}