Se vorbește mult despre Rack, dar dacă nu sunteți autorul unui cadru, rareori îl vedeți. Deci ce este Rack? Și de ce, ca dezvoltator de aplicații, ar trebui să-ți pese de asta?
Rack-ul este un fel de middleware. Se află între aplicația dvs. web și serverul web. Gestionează toate apelurile API specifice serverului, transmite solicitarea HTTP și toți parametrii de mediu dintr-un hash și dă răspunsul aplicației dvs. serverului. Cu alte cuvinte, aplicația dvs. nu trebuie să știe să vorbească cu un server HTTP, trebuie să știe să vorbească cu Rack.
Aceasta prezintă o serie de avantaje. În primul rând, a vorbi cu Rack este ușor (așa cum veți vedea mai jos). În al doilea rând, din moment ce nu trebuie decât să știi cum să vorbești cu Rack, iar Rack știe să vorbească cu multe servere HTTP diferite, aplicația ta va rula pe oricare dintre aceste servere HTTP. Rack-ul este ca un adaptor universal pentru aplicații web.
Aplicațiile Rack în sine nu sunt nimic special. De fapt, API-ul Rack este atât de simplu simplu, încât poate fi descris într-o singură propoziție:
O aplicație Rack este orice obiect Ruby care răspunde la apel metodă, ia un singur parametru hash și returnează un tablou care conține codul de stare de răspuns, anteturile de răspuns HTTP și corpul de răspuns ca un tablou de șiruri.
Cam asta e tot. Pare prea simplu pentru a fi adevărat, sau cel puțin prea simplu pentru a fi util, dar atunci când se reduce cu adevărat la asta, tot ceea ce faci cu adevărat când vorbești cu serverele HTTP.
Dar la întrebarea reală: de ce, ca programator de aplicații, ar trebui să vă pese de Rack? În primul rând, există întotdeauna iluminare în a înțelege modul în care funcționează cadrul tău. Dar, mai important, sunt lucruri utile pe care le poți face cu Rack. Cel mai important: middleware.
Acum, sună un pic ciudat. Dar un strat suplimentar între aplicația ta și Rack poate fi un lucru bun și poți implementa caracteristici care ar înghesui doar aplicația ta. Ce face acest middleware este pur și simplu să preiați cererea de la Rack, să o transmiteți aplicației dvs., să obțineți răspunsul acesteia, să o adăugați ceva sau să o filtrați sau ceva de-a lungul acestor linii și apoi să transmiteți răspunsul la Rack. Acest lucru poate fi utilizat pentru a implementa funcții foarte interesante, cum ar fi un logger-agnostic server, sau un verificator de sanitate cerere, sau un mic software care trimite un e-mail la un admin de fiecare dată când aplicația dvs. revine cu un 404. Niciuna dintre aceste funcții nu trebuie să se aglomereze. aplicație, acestea pot fi implementate ca middleware cu Rack.