Sobes.tech
Middle

Мидлвэр дар барномаҳо барои чӣ истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Middleware в вэб-аплікацыях — гэта прамежкавае праграмнае забеспячэнне, якое апрацоўвае HTTP-запыты і адказі. Яно знаходзіцца паміж вэб-серверам і асноўнай логікай прыкладання.

Асноўныя задачы middleware:

  • Прадапрацоўка запыту:
    • Аўтэнтыфікацыя і аўтарызацыя карыстальніка.
    • Парсінг уваходных дадзеных запыту (JSON, XML і г.д.).
    • Валідацыя дадзеных запыту.
    • Лагіраванне запытаў.
    • Дадаванне загалоўкаў да запыту.
  • Постапрацоўка адказу:
    • Мадыфікацыя адказу перад адпраўкай кліенту (напрыклад, дадаванне загалоўкаў).
    • Сціск адказу.
    • Апрацоўка памылак (выключэнняў).
  • Кіраванне патокам выканання: Middleware можа перапыніць апрацоўку запыту і вярнуць адказ на ранняй стадыі (напрыклад, пры адсутнасці правоў доступу).

Перавагі выкарыстання middleware:

  • Модульнасць: Падзел задач на асобныя, паўторна выкарыстоўваныя кампаненты.
  • Гібкасць: Лёгка дадаваць або выдаляць функцыянальнасць, не змяняючы асноўную логіку прыкладання.
  • Чытальнасць кода: Палепшэнне структуры прыкладання за кошт выдзялення скразных аперацый.
  • Тэставанасць: Адзінкавыя middleware лягчэй тэставаць ізалявана.

У PHP-фреймворках (такіх як Laravel, Symfony, Slim) middleware часта рэалізуюцца ў выглядзе класаў, якія імплементуюць пэўны інтэрфейс.

<?php

// Прыклад структуры middleware (інтэрфейс)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// Прыклад рэалізацыі middleware (аўтэнтыфікацыя)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // Праверка аўтэнтыфікацыі
        if (!isAuthenticated()) {
            // Калі карыстальнік не аўтэнтыфікаваны, перапыняем выкананне і вяртаем памылку
            return new Response(401, [], 'Unauthorized');
        }

        // Калі ўсё добра, перадаем запыт наступнаму апрацоўшчыку (ці асноўнай логіцы прыкладання)
        return $this->nextHandler->handle($request);
    }
}