Sobes.tech
Middle

Middleware деген эмне?

sobes.tech AI

AIден жооп

Ортоңку программалык камсыздоо (middleware) — бул программалык катмар же рамка, ал кирүүчү HTTP суроолорду акыркы иштеткичке (мисалы, контроллер) жетпейинче иштетет жана иштетүүдөн кийин чыгуу HTTP жоопторун иштетет. Ал ар кандай иш-аракеттерди аткарат: аутентификация, уруксат берүү, журнал жүргүзүү, суроо/жоопту өзгөртүү жана башка. Middleware адатта pipeline түзөт, анда ар бир middleware өз функциясын аткарып, суроону кийинкиге же акыркы иштеткичке өткөрөт.

PHPде мисал (PSR-7/PSR-15 колдонуу менен):

<?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
    {
        // Колдонуучунун аутентификациясын текшерүү
        if (!$this->isAuthenticated($request)) {
            // Эгер аутентификациядан өтпөсө, ката кайтарат
            return new \Slim\Psr7\Response(401); // PSR-7 жооп түзүү мисалы
        }

        // Эгер аутентификация өтсө, суроону кийинкиге өткөрөт
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Текшерүү логикасы (мисалы, баштама, сессия жана башка)
        return true; // Placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Суроо иштетилмейинче маалыматтарды журналга жазуу
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Суроону кийинкиге өткөрүү жана жооп алуу
        $response = $handler->handle($request);

        // Жоопту иштеткенден кийин маалыматтарды журналга жазуу
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Жоопту кайтаруу
        return $response;
    }
}

// Колдонуунун мисалы (жайгаштырылган)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Middleware-дер суроо иштетүүнү бөлүп, кодду модулдуу, кайра колдонууга жана тестирлөө оңой кылат. Алар "бир жоопкерчилик" принцибин карманат.