Fala-se muito sobre Prateleira, mas, a menos que você seja um autor de estrutura, raramente o vê. Então, o que é Rack? E por que, como desenvolvedor de aplicativos, você deveria se preocupar com isso?
Noções básicas de rack
Rack é um tipo de middleware. Ele fica entre o aplicativo da web e o servidor da web. Ele lida com todas as chamadas de API específicas do servidor, transmite a solicitação HTTP e todos os parâmetros do ambiente em um hash e devolve a resposta do seu aplicativo ao servidor. Em outras palavras, seu aplicativo não precisa saber como conversar com um servidor HTTP, precisa saber como conversar com o Rack.
Vantagens do rack
Isso tem várias vantagens. Primeiro, conversar com o Rack é fácil (como você verá abaixo). Segundo, como você só precisa saber como falar com o Rack e o Rack sabe como falar com muitos servidores HTTP diferentes, seu aplicativo será executado em qualquer um desses servidores HTTP. O rack é como um adaptador universal para aplicativos da web.
As próprias aplicações de rack não são nada de especial. De fato, a API do Rack é tão simples que pode ser descrita em uma única frase:
Um aplicativo Rack é qualquer objeto Ruby que responde ao ligar, pega um único parâmetro de hash e retorna uma matriz que contém o código de status da resposta, os cabeçalhos de resposta HTTP e o corpo da resposta como uma matriz de cadeias.
É isso mesmo. Parece muito simples para ser verdade, ou pelo menos muito simples para ser útil, mas quando realmente se trata disso, é tudo o que você realmente está fazendo quando está conversando com servidores HTTP.
Por que o rack é importante?
Mas vamos à pergunta real: por que, como programador de aplicativos, você deve se preocupar com o Rack? Bem, primeiro, há sempre iluminação para entender como sua estrutura funciona. Mais importante, porém, há coisas úteis que você pode fazer com o Rack. Mais importante: middleware.
Agora, isso parece um pouco estranho. Mas uma camada extra entre seu aplicativo e o Rack pode ser uma coisa boa e implementar recursos que apenas atrapalharão seu aplicativo. O que esse middleware faz é simplesmente pegar a solicitação do Rack, passá-la para o seu aplicativo, obter seu resposta, adicione algo a ele ou filtre-o ou algo nesse sentido e depois passe a resposta de volta para Prateleira. Isso pode ser usado para implementar pequenos recursos muito interessantes, como um criador de logs independente de servidor ou uma solicitação verificador de sanidade ou um pouco de middleware que envia um e-mail a um administrador toda vez que seu aplicativo volta com um 404. Nenhum desses recursos precisa sobrecarregar seu aplicativo; eles podem ser implementados como middleware no Rack.