Treci la conținutul principal

Cod în jurul fiecărui handler

Middleware este cod care rulează în jurul handlerelor tale: înainte ca cererea să ajungă la ele, după ce răspunsul pleacă de la ele sau în locul lor. Jurnalizare, autentificare, limitarea ritmului cererilor, compresie — toate sunt middleware.

Aceeași idee circulă sub trei nume: framework-urile web spun middleware, gRPC spune interceptor, unele ecosisteme spun filtru. Un concept, trei vocabulare.

În PHP, un middleware este o funcție care primește un handler — orice callable — și returnează un callable împachetat: exact șablonul Decorator din grupul despre șabloane de proiectare, iar o stivă de astfel de funcții se comportă ca un Chain of Responsibility.


Un middleware de jurnalizare

withLog împachetează orice handler: scrie în jurnal cererea la intrare, lasă handlerul să lucreze și scrie din nou la ieșire. Handlerul însuși rămâne complet neștiutor.

Serverul rulează ca un proces separat, așa că jurnalul lui nu poate ajunge singur în terminalul demonstrației — middleware-ul adaugă liniile într-un fișier de jurnal mic, iar demonstrația afișează liniile proaspete după fiecare cerere.

Împachetează o dată, jurnalizează tot

Handlerul împachetat servește două căi diferite și ambele ajung în jurnal — jurnalizarea este scrisă o singură dată, în împachetare, nu în fiecare handler.

Prompt
Scrie un script PHP cu un middleware withLog care împachetează un handler callable, scriind în jurnal o linie cu săgeată ce conține metoda și calea înainte de a apela handlerul următor și o linie de încheiere după. Direcționează două căi prin handlerul împachetat, servește-l cu serverul încorporat, cere ambele căi și afișează liniile din jurnal și răspunsurile.
Ieșire: script PHP
Wrap once, log everything

Middleware care oprește cererea

Un middleware poate și să refuze: o verificare de autentificare care nu găsește o cheie valabilă răspunde 401 Unauthorized și nu apelează niciodată handlerul următor.

Înlănțuit ca withLog(withAuth($handler)), cererea trece prin straturi în ordine — iar răspunsul iese la suprafață înapoi prin ele.

Un strat de autentificare în lanț

Cererea fără cheie este oprită de stratul de autentificare cu 401 — handlerul nu rulează niciodată. Cu cheia, cererea trece prin tot lanțul și ajunge la date.

Prompt
Scrie un script PHP cu două middleware-uri înlănțuite: withLog care scrie cererea în jurnal și withAuth care verifică antetul X-API-Key și răspunde 401 fără a apela handlerul următor atunci când cheia este greșită. Împachetează un handler de date ca withLog(withAuth($handler)), servește-l cu serverul încorporat, apoi trimite o cerere fără cheie și una cu ea, afișând ambele statusuri și corpuri.
Ieșire: script PHP