Sobes.tech
Middle

Zašto se koristi middleware u aplikacijama?

sobes.tech АИ

Одговор од АИ

Middleware u veb aplikacijama je međuprocesorski softver koji obrađuje HTTP zahteve i odgovore. Nalazi se između veb servera i glavne logike aplikacije.

Glavni zadaci middleware-a:

  • Prethodno obrađivanje zahteva:
    • Autentifikacija i autorizacija korisnika.
    • Parsiranje ulaznih podataka zahteva (JSON, XML itd.).
    • Validacija podataka zahteva.
    • Evidentiranje zahteva.
    • Dodavanje zaglavlja zahtevu.
  • Postobrada odgovora:
    • Izmena odgovora pre slanja klijentu (npr. dodavanje zaglavlja).
    • Kompresija odgovora.
    • Rukovanje greškama (izuzecima).
  • Upravljanje tokom izvršenja: Middleware može prekinuti obradu zahteva i vratiti odgovor u ranoj fazi (npr. ako nema prava pristupa).

Prednosti korišćenja middleware-a:

  • Modularnost: Podela zadataka na nezavisne, ponovo upotrebljive komponente.
  • Fleksibilnost: Lako dodavanje ili uklanjanje funkcionalnosti bez promene glavne logike aplikacije.
  • Čitljivost koda: Poboljšava strukturu aplikacije izdvajajući operacije koje se prepliću.
  • Testabilnost: Pojedinačni middleware je lakši za testiranje u izolaciji.

U PHP okvirima (kao Laravel, Symfony, Slim) middleware se često implementira u obliku klasa koje implementiraju određeni interfejs.

<?php

// Primer strukture middleware-a (interfejs)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// Primer implementacije middleware-a (autentikacija)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // Provera autentikacije
        if (!isAuthenticated()) {
            // Ako korisnik nije autentikovan, prekida se izvršenje i vraća greška
            return new Response(401, [], 'Unauthorized');
        }

        // Ako je sve u redu, prosleđuje zahtev sledećem rukovaocu (ili glavnoj logici aplikacije)
        return $this->nextHandler->handle($request);
    }
}