Middle
Kam paredzēts middleware lietojums programmās?
sobes.tech AI
Atbilde no AI
Starpnieciskā programmatūra tīmekļa lietojumprogrammās — tā ir starpniekprogramma, kas apstrādā HTTP pieprasījumus un atbildes. Tā atrodas starp tīmekļa serveri un galveno lietojumprogrammas loģiku.
Galvenie starpnieciskās programmatūras uzdevumi:
- Pieprasījuma iepriekšēja apstrāde:
- Lietotāja autentifikācija un autorizācija.
- Ienākošo datu analīze (JSON, XML utt.).
- Pieprasījuma datu validācija.
- Pieprasījumu reģistrēšana.
- Galvgalu pievienošana pieprasījumam.
- Atbildes pēc apstrādes:
- Atbildes modifikācija pirms tās nosūtīšanas klientam (piemēram, galvgalu pievienošana).
- Atbildes saspiešana.
- Kļūdu apstrāde (izņēmumi).
- Plūsmas vadība: Starpnieciskā programmatūra var pārtraukt pieprasījuma apstrādi un atgriezt atbildi agrīnā stadijā (piemēram, ja nav piekļuves tiesību).
Starpprogrammatūras izmantošanas priekšrocības:
- Modulāri: uzdevumu sadalīšana atsevišķās, atkārtoti izmantojamās sastāvdaļās.
- Elastīgi: viegli pievienot vai noņemt funkcionalitāti, nemainot galveno loģiku.
- Koda lasāmība: uzlabot programmas struktūru, izdalot kopīgas operācijas.
- Testējamība: atsevišķa starpnieciskā programmatūra ir viegli testējama izolēti.
PHP ietvaros (piemēram, Laravel, Symfony, Slim) starpnieciskā programmatūra bieži tiek īstenota kā klases, kas īsteno noteiktu saskarni:
<?php
// Starpnieciskās programmatūras struktūras piemērs (saskarne)
interface RequestHandlerInterface {
public function handle(RequestInterface $request): ResponseInterface;
}
// Starpnieciskās programmatūras īstenošana (autentifikācija)
class AuthenticationMiddleware implements RequestHandlerInterface {
public function handle(RequestInterface $request): ResponseInterface {
// Autentifikācijas pārbaude
if (!isAuthenticated()) {
// Ja lietotājs nav autentificēts, pārtraucam un atgriežam kļūdu
return new Response(401, [], 'Unauthorized');
}
// Ja viss ir kārtībā, nododam pieprasījumu nākamajam apstrādātājam (vai galvenajai loģikai)
return $this->nextHandler->handle($request);
}
}