Der er meget snak om Rack, men medmindre du selv er rammeforfatter, ser du det sjældent. Så hvad er Rack? Og hvorfor skulle du som applikationsudvikler bekymre dig om det?
Grundlæggende om rack
Rack er en slags mellemvare. Det sidder mellem din webapplikation og webserveren. Det håndterer alle de serverspecifikke API-opkald, videresender HTTP-anmodningen og alle miljøparametre i en hash og giver din applikations svar tilbage til serveren. Med andre ord behøver din ansøgning ikke at vide, hvordan man skal tale med en HTTP-server, den skal vide, hvordan man skal tale med Rack.
Fordele ved Rack
Dette har en række fordele. For det første er det nemt at tale med rack (som du ser nedenfor). For det andet, da du kun behøver at vide, hvordan man taler med Rack, og Rack ved, hvordan man skal tale med mange forskellige HTTP-servere, vil din applikation køre på en af disse HTTP-servere. Rack er som en universaladapter til webapplikationer.
Rack-applikationerne i sig selv er ikke noget særligt. Faktisk er Rack API så død simpelt, det kan beskrives i en enkelt sætning:
En Rack-applikation er ethvert Ruby-objekt, der reagerer på opkald metode, tager en enkelt hash-parameter og returnerer en matrix, der indeholder responsstatuskoden, HTTP-responsoverskrifter og responslegemet som en matrix af strenge.
Det er stort set det. Det lyder for simpelt til at være sandt eller i det mindste for simpelt til at være nyttigt, men når det virkelig kommer ned til det, er det alt hvad du virkelig laver, når du taler med HTTP-servere.
Hvorfor er rack vigtig?
Men videre til det virkelige spørgsmål: Hvorfor skal du som applikationsprogrammør bekymre dig om Rack? Nå først, der er altid oplysning ved at forstå, hvordan dine rammer fungerer. Men vigtigere er, at der er nyttige ting, du kan gøre med Rack. Vigtigst: mellemvare.
Nu lyder dette lidt underligt. Men et ekstra lag mellem din applikation og Rack kan være en god ting, og implementere funktioner, der kun ville rod i din applikation. Hvad denne mellemvare gør, er blot at tage anmodningen fra Rack, videresende den til din applikation, få den svar, tilføj noget til det, eller filtrer det eller noget i retning af disse linjer, og send derefter svaret tilbage til Rack. Dette kan bruges til at implementere meget interessante små funktioner som en server-agnostisk logger eller en anmodning sanity checker, eller en lille mellemvare, der e-mailer en administrator hver gang din applikation kommer tilbage med en 404. Ingen af disse funktioner behøver at rodføre din applikation, de kan implementeres som mellemvare med Rack.