Sobes.tech
Middle

Middleware nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Ara katmanlı yazılım (middleware), gelen HTTP isteklerini son işleyiciye (örneğin, denetleyici) ulaşmadan önce ve işleme sonrası çıkan HTTP yanıtlarını işleyen yazılım veya çerçevedir. Çeşitli işlemleri gerçekleştirir: kimlik doğrulama, yetkilendirme, günlük kaydı, istek/yanıt değiştirme vb. Middlewares genellikle bir boru hattı (pipeline) oluşturur; burada her middleware kendi fonksiyonunu yerine getirir ve isteği bir sonraki veya son işleyiciye iletir.

PHP'de PSR-7/PSR-15 kullanılarak örnek:

<?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
    {
        // Kullanıcı kimlik doğrulama kontrolü
        if (!$this->isAuthenticated($request)) {
            // Kullanıcı doğrulanmamışsa hata döndür
            return new \Slim\Psr7\Response(401); // PSR-7 yanıt örneği
        }

        // Kullanıcı doğrulanmışsa, isteği bir sonraki işleyiciye ilet
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Kimlik doğrulama mantığı (başlıklar, oturum vb.)
        return true; // Yer tutucu
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // İşlem öncesi isteğin bilgilerini kaydet
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // İsteği işleyiciye ilet ve yanıtı al
        $response = $handler->handle($request);

        // İşlem sonrası yanıt bilgilerini kaydet
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Yanıtı döndür
        return $response;
    }
}

// Router'da kullanım örneği (basitleştirilmiş)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middlewares, istek işleme mantığını modüler hale getirerek kodun daha yeniden kullanılabilir, test edilebilir ve yönetilebilir olmasını sağlar. "Tek sorumluluk ilkesi"ne uygun hareket ederler.