Si parla molto di Rack, ma se non sei tu stesso un autore di framework, raramente lo vedi. Quindi cos'è Rack? E perché, come sviluppatore di applicazioni, dovresti preoccupartene?
Rack è una specie di middleware. Si trova tra l'applicazione Web e il server Web. Gestisce tutte le chiamate API specifiche del server, passa la richiesta HTTP e tutti i parametri dell'ambiente in un hash e restituisce la risposta dell'applicazione al server. In altre parole, l'applicazione non ha bisogno di sapere come parlare con un server HTTP, deve sapere come parlare con Rack.
Questo ha una serie di vantaggi. Innanzitutto, parlare con Rack è facile (come vedrai di seguito). In secondo luogo, poiché è necessario solo sapere come parlare con Rack e Rack sa come parlare con molti server HTTP diversi, l'applicazione verrà eseguita su uno di questi server HTTP. Rack è come un adattatore universale per applicazioni web.
Le applicazioni Rack stesse non sono niente di speciale. In effetti, l'API Rack è così semplice, che può essere descritta in una sola frase:
Un'applicazione Rack è qualsiasi oggetto Ruby che risponde al chiamata metodo, accetta un singolo parametro hash e restituisce un array contenente il codice dello stato della risposta, le intestazioni di risposta HTTP e il corpo della risposta come un array di stringhe.
È praticamente tutto. Sembra troppo semplice per essere vero, o almeno troppo semplice per essere utile, ma quando si arriva davvero ad esso, è tutto quello che stai facendo quando parli con i server HTTP.
Ma alla vera domanda: perché, come programmatore dell'applicazione, dovresti preoccuparti di Rack? Prima di tutto, c'è sempre l'illuminazione nel capire come funziona il tuo framework. Ma soprattutto, ci sono cose utili che puoi fare con Rack. Ancora più importante: middleware.
Ora, questo suona un po 'strano. Ma un ulteriore livello tra l'applicazione e Rack può essere una buona cosa e implementare funzionalità che ingombrerebbero solo l'applicazione. Ciò che fa questo middleware è semplicemente prendere la richiesta da Rack, passarla alla tua applicazione, ottenere la sua risposta, aggiungere qualcosa ad essa o filtrarla o qualcosa lungo queste linee e quindi restituire la risposta a Rack. Questo può essere usato per implementare piccole funzionalità molto interessanti come un logger indipendente dal server, un controllo di integrità della richiesta o un piccolo middleware che invia un'e-mail a un amministratore ogni volta che l'applicazione torna con un 404. Nessuna di queste funzionalità deve ingombrare il tuo applicazione, possono essere implementati come middleware con Rack.