Sobes.tech
Middle

Na čo sa používa middleware v aplikáciách?

sobes.tech AI

Odpoveď od AI

Middleware v webových aplikáciách je medzičlánok softvéru, ktorý spracováva HTTP požiadavky a odpovede. Nachádza sa medzi webovým serverom a hlavnou logikou aplikácie.

Hlavné úlohy middleware:

  • Predspracovanie požiadavky:
    • Autentifikácia a autorizácia používateľa.
    • Parsovanie vstupných dát požiadavky (JSON, XML atď.).
    • Validácia dát požiadavky.
    • Logovanie požiadaviek.
    • Pridanie hlavičiek k požiadavke.
  • Postprocessing odpovede:
    • Úprava odpovede pred jej odoslaním klientovi (napríklad pridanie hlavičiek).
    • Kompresia odpovede.
    • Riešenie chýb (výnimky).
  • Riadenie toku vykonávania: Middleware môže prerušiť spracovanie požiadavky a vrátiť odpoveď v ranom štádiu (napríklad pri absencii práv na prístup).

Výhody používania middleware:

  • Modularita: Rozdelenie úloh na samostatné, opakovane použiteľné komponenty.
  • Flexibilita: Jednoduché pridanie alebo odstránenie funkcií bez zmeny hlavnej logiky aplikácie.
  • Čitateľnosť kódu: Zlepšenie štruktúry aplikácie prostredníctvom oddelenia priechodných operácií.
  • Testovateľnosť: Samostatné middleware je jednoduchšie testovať izolovane.

V PHP rámcoch (ako Laravel, Symfony, Slim) sa middleware často implementuje vo forme tried, ktoré implementujú špecifické rozhranie.

<?php

// Príklad štruktúry middleware (rozhranie)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// Príklad implementácie middleware (autentifikácia)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // Kontrola autentifikácie
        if (!isAuthenticated()) {
            // Ak používateľ nie je autentifikovaný, preruší sa vykonávanie a vráti sa chyba
            return new Response(401, [], 'Unauthorized');
        }

        // Ak je všetko v poriadku, požiadavka sa odovzdá ďalšiemu spracovateľovi (alebo hlavnej logike aplikácie)
        return $this->nextHandler->handle($request);
    }
}