Sobes.tech
Middle

Kam skirta middleware programose?

sobes.tech AI

Atsakymas iš AI

Tarpinė programinė įranga žiniatinklio programose — tai tarpinė programinė įranga, kuri apdoroja HTTP užklausas ir atsakymus. Ji yra tarp žiniatinklio serverio ir pagrindinės programos logikos.

Pagrindiniai tarpinės programinės įrangos uždaviniai:

  • Užklausos išankstinė apdorojimas:
    • Vartotojo autentifikavimas ir autorizacija.
    • Įeinančių duomenų analizė (JSON, XML ir kt.).
    • Užklausos duomenų validacija.
    • Užklausų registravimas.
    • Antraščių pridėjimas prie užklausos.
  • Atsakymo po apdorojimo:
    • Atsakymo modifikavimas prieš jį siunčiant klientui (pavyzdžiui, antraščių pridėjimas).
    • Atsakymo suspaudimas.
    • Klaidos apdorojimas (išimtys).
  • Vykdymo srauto valdymas: Tarpinė programinė įranga gali nutraukti užklausos apdorojimą ir grąžinti atsakymą ankstyvame etape (pavyzdžiui, nesant prieigos teisių).

Tarpinės programinės įrangos naudojimo privalumai:

  • Moduliškumas: užduočių padalijimas į atskirus, pakartotinai naudojamus komponentus.
  • Lankstumas: lengva pridėti arba pašalinti funkcionalumą, nekeičiant pagrindinės logikos.
  • Kodo skaitomumas: programos struktūros gerinimas, išskiriant bendras operacijas.
  • Testuojamumas: atskira tarpinė programinė įranga lengvai testuojama izoliuotai.

PHP karkasuose (pavyzdžiui, Laravel, Symfony, Slim) tarpinė programinė įranga dažnai įgyvendinama kaip klasių rinkinys, kuris įgyvendina tam tikrą sąsają:

<?php

// Tarpinės programinės įrangos struktūros pavyzdys (sąsaja)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// Tarpinės programinės įrangos įgyvendinimas (autentifikacija)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // Autentifikacijos patikrinimas
        if (!isAuthenticated()) {
            // Jei vartotojas nėra autentifikuotas, nutraukiame ir grąžiname klaidą
            return new Response(401, [], 'Unauthorized');
        }

        // Jei viskas gerai, perduodame užklausą kitam apdorotojui (arba pagrindinei logikai)
        return $this->nextHandler->handle($request);
    }
}