Rack (interface de servidor web) - Rack (web server interface)

Rack, uma interface de servidor web Ruby
Rack-logo.png
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 ; 14 meses atrás ( 2020-06-15 )
Repositório
Sistema operacional Plataforma cruzada
Modelo Middleware
Licença Licença MIT
Local na rede Internet rack .github .io Edite isso no Wikidata

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:

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

Referências

links externos