Rails: middleware personalizado
O Rack é o contrato por baixo de toda aplicação Rails: um objeto responde a call(env) e devolve status, headers e body. O curso trata a aplicação como um stack desses objetos e mostra como escrever seu próprio elo. Aborda a forma de dois métodos de um middleware e o posicionamento com use, insert_before e insert_after. Também trata de envolver ou fazer curto-circuito numa requisição, de como gems como OmniAuth e Rack::Attack entram no stack e de testes com um app falso. Termina com uma cadeia montada à mão.
O que você vai aprender
- ✓O contrato do Rack: call(env) devolvendo status, headers e body
- ✓Como escrever um middleware com initialize(app) e call(env)
- ✓Como posicionar middleware com use, insert_before e insert_after
- ✓Quando envolver a resposta e quando fazer curto-circuito na requisição
- ✓Como gems acrescentam middleware, de forma explícita ou por uma Railtie
- ✓Testes de middleware com um app falso e o Rack::MockRequest
O que é o Rack
Uma corrida de revezamento tem vários corredores, e não um só. Cada um corre sua parte e passa o bastão ao próximo. Da arquibancada parece uma corrida contínua. De perto é uma cadeia de passagens, e qualquer corredor pode atrasar o bastão, acelerá-lo ou se recusar a passá-lo. Uma requisição no…
Ler a aula completa grátis →Currículo
7 aulasO que é o Rack
Explica o contrato do Rack e mostra a aplicação Rails como um stack ordenado de middleware que termina no router.
Escrevendo um middleware: initialize e call
Monta um middleware de medição de tempo com initialize e call, e mostra o que quebra sem o @app.call(env).
Onde o middleware mora: insert_before e insert_after
Trata de use, insert_before, insert_after e swap, e de como a posição define os dados que um middleware enxerga.
Curto-circuitando e envolvendo a resposta
Compara envolver a resposta com responder antes da hora, usando uma página de manutenção e o throttle do Rack::Attack.
Middleware vindo de uma gem: duas formas de entrar
Mostra o OmniAuth entrando por uma chamada use explícita e o Rack::Attack se inserindo por um initializer de Railtie.
Testando um middleware sem um servidor de verdade
Testa um middleware com uma lambda falsa e o Rack::MockRequest, e explica por que bugs de ordem pedem request specs.
Juntando tudo: uma cadeia de middleware montada à mão
Revisa o curso e propõe montar à mão uma cadeia de middleware que respeite a ordem e o curto-circuito.