Um momento
Aula 26
Cursos / Como Criar uma API JSON em Golang - CRUD Simples
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

  1. A função middleware em GorillaMux deve seguir a assinatura que recebe um http.Handler e retorna outro http.Handler.
  2. 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)
        })
    }
    
  3. 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çalho Content-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: