Er wordt veel over Rack gesproken, maar tenzij je zelf een framework-auteur bent, zie je het zelden. Dus wat is Rack? En waarom, als applicatieontwikkelaar, er om zou moeten geven?
Rack is een soort middleware. Het bevindt zich tussen uw webtoepassing en de webserver. Het verwerkt alle server-specifieke API-aanroepen, geeft het HTTP-verzoek en alle omgevingsparameters door in een hash en geeft het antwoord van uw toepassing terug aan de server. Met andere woorden, uw toepassing hoeft niet te weten hoe te praten met een HTTP-server, het moet weten hoe te praten met Rack.
Dit heeft een aantal voordelen. Ten eerste is praten met Rack eenvoudig (zoals u hieronder zult zien). Ten tweede, omdat u alleen hoeft te weten hoe u met Rack moet praten en Rack weet hoe u met veel verschillende HTTP-servers moet praten, wordt uw toepassing op elk van deze HTTP-servers uitgevoerd. Rack is als een universele adapter voor webapplicaties.
De Rack-applicaties zelf zijn niets bijzonders. In feite is de Rack API zo doodsimpel dat het in een enkele zin kan worden beschreven:
Een Rack-toepassing is een Ruby-object dat reageert op de telefoontje methode, neemt een enkele hash-parameter en retourneert een array met de responsstatuscode, HTTP-antwoordheaders en de responsbody als een reeks strings.
Dat is het eigenlijk wel. Het klinkt te simpel om waar te zijn, of op zijn minst te simpel om nuttig te zijn, maar als het er echt op aankomt, is dat alles wat je echt doet als je met HTTP-servers praat.
Maar op de echte vraag: waarom zou je als applicatieprogrammeur zich zorgen maken over Rack? Nou eerst, er is altijd verlichting in het begrijpen van hoe uw framework werkt. Maar nog belangrijker, er zijn handige dingen die u met Rack kunt doen. Het belangrijkste is: middleware.
Nu klinkt dit een beetje vreemd. Maar een extra laag tussen uw toepassing en Rack kan een goede zaak zijn en functies implementeren die uw toepassing alleen maar zouden overbelasten. Wat deze middleware doet, is simpelweg het verzoek van Rack aannemen, doorgeven aan uw toepassing, het antwoord krijgen, er iets aan toevoegen of het filteren of zoiets en vervolgens het antwoord teruggeven aan Rack. Dit kan worden gebruikt om zeer interessante kleine functies te implementeren, zoals een server-agnostische logger, of een sanity checker voor aanvragen, of een beetje middleware die een admin e-mailt telkens wanneer uw toepassing terugkomt met een 404. Geen van deze functies hoeft uw applicatie, kunnen ze worden geïmplementeerd als middleware met Rack.