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 están envueltas en una única llamada de método que maneja solicitudes y respuestas HTTP .
Autor (es) original (es) | Leah Neukirchen |
---|---|
Desarrollador (es) | James Tucker, Josh Peek, José Valim, Michael Fellinger, Aaron Patterson, Santiago Pastorino, Konstantin Haase |
Lanzamiento estable | 2.2.3 / 15 de junio de 2020 [1] |
Repositorio | |
Sistema operativo | Multiplataforma |
Tipo | Middleware |
Licencia | Licencia MIT |
Sitio web | estante |
Rack es utilizado por muchas bibliotecas y frameworks web de Ruby , como Ruby on Rails y Sinatra . Está disponible como Ruby Gem . Muchas aplicaciones de 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]
Descripción general
Las características de una aplicación Rack es que el objeto de la 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.
Medio ambiente [7]
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:
- Método de solicitud HTTP
- La información de la URL (información que dirigirá a la aplicación, información que dirige a la ubicación real en la aplicación, cadena de consulta )
- Información del servidor como el nombre del servidor y el puerto del servidor
- Las metavariables HTTP que se reciben del cliente.
b) Información específica del rack
Esto incluye la información como
- La versión de la aplicación Rack que se está ejecutando
- El esquema de URL que se utiliza, es decir, si la solicitud que se recibe es http o https.
- Los datos HTTP sin procesar.
- Un objeto Ruby para informar errores.
- Información como si el objeto de la aplicación se invoca simultáneamente desde otro hilo o proceso.
- Información sobre las expectativas y capacidades del servidor (capacidad del servidor para secuestrar la conexión).
En caso de que la aplicación se utilice como middleware, el entorno puede tener objetos que proporcionarían información de sesión, capacidades de registro, información sobre el tamaño de los datos que se pueden usar para leer y escribir, etc. Además de estos, el servidor puede almacenar sus propios datos en el medio ambiente.
Respuesta de rack [7]
El objeto de servidor en rack devuelve una respuesta que contiene tres partes: el estado, los encabezados y el cuerpo.
- El estado contiene los códigos de estado HTTP , como 200,404.
- El encabezado contiene la respuesta para cada uno y proporciona los pares clave-valor. Las claves tienen que ser cuerdas.
- El cuerpo contiene los datos finales que envía el servidor al solicitante.
Rack :: Response proporciona una interfaz conveniente para crear una respuesta de Rack. La clase Rack :: Response se define en lib / rack / response.rb. Para usar la clase Response, cree una instancia desde la capa de middleware hacia abajo en la pila. Puede utilizarse para modificar las cookies.
Middleware en racks [7]
Rack facilita la adición de una cadena de componentes de middleware entre la aplicación y el servidor web. Se pueden usar varios componentes de middleware en el bastidor, lo que modifica la solicitud / respuesta antes de pasarla al siguiente componente. Esto se llama pila de middleware.
El servidor Rack agrega múltiples middleware de forma predeterminada para las funcionalidades como mostrar la excepción con todos los detalles, [8] validando la solicitud y las respuestas de acuerdo con las especificaciones de Rack [9], etc.
Aplicación de ejemplo
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ía 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
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.
Ver también
- Python WSGI
- Perl PSGI
- JavaScript JSGI
- Pasta de Python
- Smalltalk Seaside
- FastCGI
- Servlet de Java
- JavaScript del lado del servidor
- Protocolo Apache JServ
- Hielo ZeroC
- Cisco Etch
- Interfaz de programación de aplicaciones de servidor de Internet ISAPI (Microsoft)
Referencias
- ^ "Lanzamientos - rack / rack" . Consultado el 20 de junio de 2020 , a través de GitHub .
- ^ Pancake: Cómo apilar y acoplar libremente aplicaciones web basadas en rack . Rubyinside.com (4 de diciembre de 2009). Consultado el 20 de septiembre de 2013.
- ^ jack - introducción Archivado el 17 de diciembre de 2014 en la Wayback Machine . Jackjs.org. Consultado el 20 de septiembre de 2013.
- ^ anillo - introducción . GitHub.com. Consultado el 20 de abril de 2020.
- ^ clacklisp.org . Consultado el 17 de octubre de 2014.
- ^ http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana . Asp.net. Consultado el 1 de octubre de 2014.
- ^ a b c "Documentación para rack" . www.rubydoc.info . Consultado el 14 de septiembre de 2016 .
- ^ "Rack :: ShowExceptions" . www.rubydoc.info . Consultado el 14 de septiembre de 2016 .
- ^ "Rejilla :: Pelusa" . www.rubydoc.info . Consultado el 14 de septiembre de 2016 .
enlaces externos
- Página web oficial