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);
}
}