Rack es una interfaz modular entre servidores web y aplicaciones web desarrolladas en el lenguaje de programación Ruby . Con Rack, las interfaces de programación de aplicaciones (API) para frameworks web y middleware se agrupan en una única llamada de método que maneja solicitudes y respuestas HTTP .
Rack es utilizado por muchos frameworks y bibliotecas web Ruby , como Ruby on Rails y Sinatra . Está disponible como Ruby Gem . Muchas aplicaciones Ruby se denominan "compatibles con rack". [2]
Rack ha inspirado marcos similares en JavaScript [3] (jack.js), Clojure , [4] Perl ( Plack ), Common Lisp (Clack), [5] y .NET ( OWIN ). [6]
La característica de una aplicación Rack es que el objeto de aplicación responde al método de llamada. El método de llamada toma el objeto de entorno como argumento y devuelve el objeto de respuesta de Rack.
El entorno que se toma como argumento por el método de llamada se refiere a un objeto que tiene:
a) Información sobre la Solicitud HTTP
Esto incluye información como:
b) Información específica del rack
Esto incluye información como
En caso de que la aplicación se utilice como middleware, el entorno puede tener objetos que proporcionen información de la sesión, capacidades de registro, información sobre el tamaño de los datos que se pueden usar para lectura y escritura, etc. Además de esto, el servidor puede almacenar sus propios datos en el entorno.
El objeto de servidor de rack devuelve una respuesta que contiene tres partes: el estado, los encabezados y el cuerpo.
Rack::Response proporciona una interfaz práctica para crear una respuesta de Rack. La clase Rack::Response está definida en lib/rack/response.rb. Para utilizar la clase Response, instancéela desde la capa de middleware hacia abajo en la pila. Se puede utilizar para modificar las cookies.
Rack facilita la incorporación de una cadena de componentes de middleware entre la aplicación y el servidor web. Se pueden utilizar varios componentes de middleware en el rack, lo que modifica la solicitud/respuesta antes de pasarla al siguiente componente. Esto se denomina pila de middleware.
El servidor Rack agrega varios middleware intermedios de forma predeterminada para funciones como mostrar excepciones con todos los detalles, [8] validar la solicitud y las respuestas de acuerdo con la especificación de Rack [9] , etc.
Una aplicación " Hello World " compatible con Rack en sintaxis Ruby :
# helloWorld.ru # La aplicación que tiene definido el método de llamada. class HelloWorld # Método de llamada que devolverá el código de estado HTTP, el tipo de contenido y el contenido. def call ( env ) [ 200 , { "content-type" => "text/html; charset=utf-8" }, [ "Hello World" ]] end end ejecutar HelloWorld . nuevo
El servidor para el código anterior se puede iniciar usando "rackup helloWorld.ru" y se puede acceder a él en http://localhost:9292/ El puerto predeterminado utilizado por la aplicación Rack es 9292.