Aula 26
Como Criar um Middleware Para o gorilla mux
Nesta aula nós aprendemos a escrever um middleware pro roteador.
O código do middleware será executado antes do código específico para a rota.
O middleware em questão é usado para definir o header que configura o tipo de contéudo para ser application/json
. Isso é preciso para que o cliente interprete a resposta do servidor usando o formato JSON.
Summary
Resumo da Aula sobre Middleware em GorillaMux
Nesta aula, continuamos a desenvolver nossa API utilizando o GorillaMux para roteamento em Go. Aqui estão os principais pontos abordados:
Refatoração das Funções
- Ao refatorar as funções da API, é importante adicionar o cabeçalho
Content-Type: application/json
em cada resposta. - Isso é necessário para que os clientes interpretem as respostas como JSON, feito nas funções de excluir, modificar, e buscar livros.
Middleware
- O uso de Middleware é sugerido para configurar cabeçalhos, como o
Content-Type
, em um único local. - Middleware é uma função que intercepta requisições antes que elas cheguem ao handler.
Implementação do Middleware
- A função middleware em GorillaMux deve seguir a assinatura que recebe um
http.Handler
e retorna outrohttp.Handler
. - Exemplo de configuração do middleware:
func jsonMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") next.ServeHTTP(w, r) }) }
- Após definir o middleware, ele é registrado no roteador com
router.Use(jsonMiddleware)
.
Testes e Logs
- Foram removidas as chamadas de configuração de cabeçalho diretamente nos handlers específicos.
- Testes no terminal confirmaram que o middleware está funcionando conforme esperado, setando o cabeçalho e registrando logs para verificar as requisições.
Recapitulação
- Criamos um middleware chamado
jsonMiddleware
que define o cabeçalhoContent-Type
nas respostas da API. - O middleware foi integrado ao roteador utilizando o método
Use
do GorillaMux. - Finalmente, foi feito um teste para verificar se a configuração funcionou corretamente.
Até a próxima aula!
Video Transcript
Olá pessoal, estamos de volta com mais uma aula de Roland continuando aqui a nossa API,
um jeito que são code simples. Então vamos aqui, note que quando a gente refatorizar
nossas funções para poder usar o roteado através do, roteamento através do GorillaMux,
a gente tem sempre que setar ou adicionar o content type application de JSON aqui para
cada função, né? No excluir, modificar, linha 98, buscar, linha 143, se impudir antes
para a resposta poder incluir esse header aqui para o cliente saber interpretar como JSON.
Seria legal se a gente refatorizar se tivesse só um local para poder adicionar ou setar esse
roteamento. A maneira de fazer isso com GorillaMux é através do middleware. Middleware é aquela
função que vai ser chamada toda vez que ele vai interceptar cada requesição e vai rodar o
middleware entre a requesição e o seu handler, né? Seu função de lidar com a rota. Então como fazer
o middleware? Deixa eu ir aqui na documentação do GorillaMux, o site GorillaMux no GitHub,
ele tem esse site daqui Gorillatookit.org.pkg.mux, vou clicar lá, tem uns instruções aqui,
inglês e tal e tal, eu vou procurar o middleware. Mux tem suporte middleware, não sei o que,
então tem esse tipo aqui middleware funk que é uma função middleware, esse tipo aqui,
então vai ser uma função, vai retornar, vai ser do tipo uma função que leva um handler e retorna
outro handler, mas o que que isso significa? Vamos ver o exemplo que eles dão. Então nesse exemplo
aqui eles falem esse middleware chamado simplemw é uma função, tem esse parameter next,
a próxima do tipo HTTP handler e aqui o valor de retorno dessa função simple middleware.
Note que a função retorna HTTP handler, na verdade vai ser a chamada da função handle
e você vai passar outra função aqui, aquela típica função com o w e o ur, o w sendo o
HTTP response writer e ur e HTTP request. Nesse caso que ele está fazendo um, ele logo
a uri da requesição do pedido HTTP. Aí depois que ele terminar de fazer as coisas do middleware,
é só chamar o next.serve-http com o wr e ele vai continuar e se tiver outro middleware vai para o
middleware até terminar os middlewares e finalmente chegar lá na função para lidar com aquela rota.
Então a gente pode usar isso, fazer o middleware e botar lá no middleware a configuração do
header application.json, content.tart. Note que fazer isso depois de criar o handler, é só usar a
função que r no roteador, rc no roteador, não confusa com requesição, roteador.use,
a função middleware que a gente vai definir, parecido com esse aqui. Então vamos lá para o nosso código.
Aqui embaixo depois de criar o roteador, deixa eu pôr aqui, vamos ver roteador e tal, roteador.use.
Aí a gente vai criar uma função aqui, o middleware, vou chamar de json, middleware,
vou chamar aqui, vamos definir essa função, essa função tem que ser do tipo quê, volto lá no site,
handler, esse tipo middleware funk que na verdade é uma função dessa forma aqui, vamos lá,
volto à editor de texto, vou definir o middleware onde será que eu defino, vou definir aqui fora mesmo,
funk, json, middleware, parâmetros, será o next, o next do tipo, o quadro tipo, HTTP,
handler, e vai retornar o quê? Vai retornar também o HTTP.
A função tem que retornar outra função, então retorna, funk, como é closure,
funk vai ser o quê? Vamos ver. A função teria que estar dentro do handler, então deixa eu olhar aqui de novo.
Então tem que ter a função, passa como argumento para o HTTP handler, funk, então vamos lá,
HTTP handler, funk, passa a função, então essa função aqui, funk, teria o que? o w, ur, HTTP,
sponsoriter, o w, ponteiro, HTTP request, essa maneira aqui, está dentro dessa função,
a gente teria que setar o nosso header, nesse caso vamos aqui ver, pode ser add,
a diferença do add e o set, você pode ir lá no docs, documentação aqui, quiser, oer, golão,
o langa, HTTP, set, está aqui a diferença, quando você usa add ele adiciona a chave, valor, ele
apende, adiciona no final, se tiver um valor associado com a chave ele vai apenas adicionar
ao que já existe, apende, incrementa, mas no caso do set seria, o set iria substituir o valor que já
existe, em vez de apende, depende de você se o aplicativo, se o servidor precisa de o add ou o set,
eu vou colocar o set aqui, tanto faz, no meu caso aqui, vamos ver, só pegar aqui, copiar e colar aqui,
pode ter set, o add, tudo faz, toda vez que bater lá vai dar o set do content application,
depois disso vai para o próximo middleware ou o handler, Next vai chamar do que do Next, Next
ponte serve, HTTP com o w e o r aqui, está bom então vamos compre aqui, então tem a função
middleware, essa função tem parameter Next, tipo HTTP handler, essa função retorna o
HTTP handler, nesse caso a gente tem que chamar o handlepunk do HTTP, vamos ver função,
wr e essa função, a gente sete o prato que quiser, depois chamamos o Next, ponte serve, ele vai
ter o middleware aqui chamada que depois é de configurar o rootador, é de fazer o rootador,
vamos ver o que dá esse negócio, antes de fazer o negócio eu vou remover todas as linhas de set
para countertype, buscar a livre, modificar livre, linha 98, remover,
esse queui livre, linha 65, remover, cadastrar livre, linha 48, remover e do listar livre finalmente,
linha 42, remover, você não tem mais aqui, só aqui mesmo, vamos lá no terminal ver se não deu erro,
aqui deu aqui, deu erro, vamos ver o primeiro, não tem argumentos,
linha 69, deu bill de novo, linha 172, parece que não passei todos os argumentos para o handlepunk,
certo, será que eu esqueci aqui talvez o segundo argumento do handlepunk, a função e o que está
aqui depois, será que é a barra só, vamos ver aqui a acometação, o simple punk,
o que é a string, seguido de funk, isso é o que, eu não sei o que, handle fun,
esqueci do r aqui, não é handle fun, o r lá, aqui tem o r, and a la, and a la function,
vamos ver lá, o dobeu de certo, vamos lá testar, barra livros, vamos ver os headers,
content type, post, error certo, put, error certo, delete, barra 2, error certo, e finalmente buscar
o livro, error certo, tá bom, se você quiser ver realmente o middle error está rodando
entre a requisição e o handle lá, é só botar um log, por exemplo, botando o código,
e no json middle error, depois de setar o header, vou falar frente a len e a fmt, aqui
frente a len, setar o header e por exemplo, barra livros, barra livros, cadê, listar livros,
vou falar fmt, frente a len, bateu no get barra livros, vamos ver, terminal, post,
outro barra livros, send, olha o log aqui, setou o header primeiro, seguido de bateu no get
barra livros, realmente foi o middle error antes de ir lá para o listar livros, então
vou voltar de todo texto e reverter esses, esses print a len, detalhe do error, tá,
vamos recapitular o que a gente fez, nós criamos o middle error para poder usar com
gorilla max, a maneira que você usa, você fala o roteador do gorilla max, ponto use,
use, a função, se você queria para o middle error, no meu caso, eu queria o json middle
error, que é uma função, como o parâmetro é o next, que é o http handler, retorna
da função do middle error, http handler, então para você retorna http handler, tem
que retorna http handler com r, funk, faz com um argumento uma função, anônimo essa
função, um wr, faz o que quiser aqui, nos casos setou o header, content type, application
de json, e finalmente quando terminar fala next, próximo, ponto serve, http com wr,
para ele poder seguir para o próximo middle error, se tiver algum, e no final, finalmente
bater lá na, no handler, função de handler da rota, tá, então por essa aula é só,
e até a próxima, tchau.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: