Sobes.tech
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);
    }
}