Rack (interface de servidor web) - Rack (web server interface)
Autor (es) original (is) | Leah Neukirchen |
---|---|
Desenvolvedor (s) | James Tucker, Josh Peek, José Valim, Michael Fellinger, Aaron Patterson, Santiago Pastorino, Konstantin Haase |
Versão estável | 2.2.3 / 15 de junho de 2020
|
Repositório | |
Sistema operacional | Plataforma cruzada |
Modelo | Middleware |
Licença | Licença MIT |
Local na rede Internet |
rack |
Rack é uma interface modular entre servidores web e aplicativos web desenvolvidos na linguagem de programação Ruby . Com o Rack, as interfaces de programação de aplicativos (APIs) para estruturas da web e middleware são agrupadas em uma única chamada de método que trata de solicitações e respostas HTTP .
Rack é usado por muitos frameworks e bibliotecas Ruby , como Ruby on Rails e Sinatra . Ele está disponível como Ruby Gem . Muitos aplicativos Ruby são chamados de "compatíveis com rack".
Rack inspirou estruturas semelhantes em JavaScript (jack.js), Clojure , Perl ( Plack ), Common Lisp (Clack) e .NET ( OWIN ).
Visão geral
As características de um aplicativo Rack são que o objeto do aplicativo responde ao método de chamada. O método call aceita o objeto de ambiente como argumento e retorna o objeto de resposta Rack.
Ambiente
O ambiente que é tomado como argumento pelo método de chamada refere-se a um objeto que possui:
a) Informações sobre a Solicitação HTTP
Isso inclui informações como:
- Método de solicitação HTTP
- As informações de URL (informações que direcionam para o aplicativo, informações que direcionam para o local real no aplicativo, string de consulta )
- Informações do servidor, como o nome do servidor e a porta do servidor
- As metavariáveis HTTP que são recebidas do cliente
b) Informações específicas do rack
Isso inclui informações como
- A versão do aplicativo Rack que está sendo executado
- O esquema de URL usado, ou seja, se a solicitação recebida for http ou https.
- Os dados HTTP brutos.
- Um objeto Ruby para relatar erros.
- Informações como se o objeto do aplicativo é simultaneamente invocado de outro thread ou processo.
- Informações sobre as expectativas e recursos do servidor (capacidade do servidor para sequestro de conexão).
Caso o aplicativo esteja sendo usado como middleware, o ambiente pode ter objetos que forneceriam informações da sessão, recursos de registro, informações sobre o tamanho dos dados que podem ser usados para leitura e gravação etc. Além disso, o servidor pode armazenar seus próprios dados no ambiente.
Resposta do rack
O objeto do servidor de rack retorna uma resposta que contém três partes: o status, os cabeçalhos e o corpo.
- O status contém os códigos de status HTTP , como 200.404.
- O cabeçalho contém a resposta para cada um e fornece os pares de valores-chave. As chaves devem ser strings.
- O corpo contém os dados finais que são enviados pelo servidor ao solicitante.
Rack :: Response fornece uma interface conveniente para criar uma resposta de Rack. A classe Rack :: Response é definida em lib / rack / response.rb. Para usar a classe Response, instancie-a da camada de middleware para baixo na pilha. Ele pode ser usado para modificar os cookies.
Middleware em racks
O Rack facilita a adição de uma cadeia de componentes de middleware entre o aplicativo e o servidor da web. Vários componentes de middleware podem ser usados no rack, o que modifica a solicitação / resposta antes de transferi-lo para o próximo componente. Isso é chamado de pilha de middleware.
O servidor Rack adiciona middleware múltiplo por padrão para as funcionalidades como mostrar exceção com todos os detalhes, validar a solicitação e respostas de acordo com as especificações Rack etc.
Aplicação de exemplo
Um aplicativo " Hello World " compatível com Rack na sintaxe Ruby :
# helloWorld.ru
# The application that has the call method defined.
class HelloWorld
# Call method that would return the HTTP status code, the content type and the content.
def call (env)
[200, {"Content-Type" => "text/html; charset=utf-8"}, ["Hello World"]]
end
end
O servidor para o código acima pode ser iniciado usando "rackup helloWorld.ru" e pode ser acessado em http: // localhost: 9292 / A porta padrão usada pelo aplicativo Rack é 9292.
Veja também
- Python WSGI
- Perl PSGI
- Javascript JSGI
- Python Paste
- Smalltalk Seaside
- FastCGI
- Java Servlet
- JavaScript do lado do servidor
- Protocolo Apache JServ
- ZeroC Ice
- Cisco Etch
- ISAPI Internet Server Application Programming Interface (Microsoft)