Como Identificar o Verbo da Requisição HTTP em Golang
Nesta aula aprendemos a identificar o verbo da requisição de HTTP que foi usado para requerir a rota.
Tradicionalmente, há dois verbos: o GET e o POST.
Para seguir a maneira REST, a rota para listar todos os livros deve ser definida com o verbo GET em vez do verbo POST. A rota POST /livros, na verdade, será usada mais tarde para o cadastro de livros.
Para facilitar o desenvolvimento de nossa API, a aula usa o Postman. Esse é um programa que contém uma interface de usuário para fazer requisições de HTTP.
Para evitar que o nosso servidor diferencie a rota POST /livros da rota GET /livros, temos que verificar que método de HTTP foi usado na requisição. Isso é possível através do parâmetro r, do tipo *http.Request. Basta checar que sua propriedade Method não tem valor "GET".
Olá pessoal, estamos de volta com mais uma aula de Golang, onde continuamos a implementação da nossa API que retorna dados em formato JSON.
Tópicos abordados:
Revisão do CRUD: Já implementamos a parte da leitura (Read) e agora passaremos para a parte de criação (Create).
Nova Rota para Cadastrar Livros:
Será criada uma nova rota (/Livros) para permitir o cadastro de um novo livro.
Utilizaremos a função HTTP.HandleFunc para lidar com essa nova rota.
Detalhes da Implementação:
Métodos HTTP:
A rota para listar livros utiliza o método GET. No entanto, se você fizer um pedido POST para a mesma rota sem especificar o método, o servidor responderá como se fosse um GET.
Teste com Postman:
O instrutor utilizará o Postman para demonstrar como enviar requisições HTTP. O Postman pode ser baixado do site oficial getpostman.com.
Passos para Teste:
Inicie o servidor com go run main.go na porta 337.
Realize uma requisição GET para http://localhost:337/Livros e observe que três livros são retornados como esperado.
Faça um teste com uma requisição POST para a mesma URL e verifique que o servidor ainda responde como se fosse uma requisição GET, já que não foi especificado o método.
Manipulação de Métodos
Para diferenciar entre métodos GET e POST:
O instrutor sugere verificar a variável R, que contém informações sobre a requisição. Se R.method não for GET, podemos retornar e não efetuar nenhuma ação.
Conclusão
Através dessa aula, aprendemos sobre a criação de rotas em nossa API e como manipular os métodos HTTP para responder adequadamente a requisições diferentes.
Essa abordagem ajudará a atualizar nossas funcionalidades na criação de novos registros, como o cadastro de livros, fortalecendo a construção da nossa API.
Video Transcript
Olá pessoal, estamos de volta com mais uma aula de Golang.
Vamos continuar a implementação da nossa API e retorno a JSON.
Nós fizemos já a parte da leitura do CRUD.
Agora vamos fazer a parte C, que é Create.
Então eu gostaria de fazer o seguinte, vamos fazer uma rota para cadastrar um livro.
Nós temos a rota aqui para listar os livros, mas que tal nós criarmos uma,
para a gente fazer uma requisição ou pedido para criar um novo livro.
Então vamos lá.
Então aqui no configurar rotas vou adicionar a nova rota.
HTTP.handlefunk, para nós lidarmos.
A rota vai ser no barra Livros.
E eu vou chamar a função de cadastrar livro no singular.
Então vamos ao cenote que temos a mesma rota e como é que ele vai diferenciar?
Bem, antes de pular para a implementação vamos pensar.
Para o listar livros esse é o pedido get pela convenção rest.
Mas note que a gente não tem nem o sinal aqui dizendo que o método vai ser get.
Na verdade se você fizer até o método que fosse post e eu bater nessa rota aqui é ver.
Vamos testar.
Eu vou comentar o que a gente estava fazendo e ver se eu fizer um pedido em vez de get
mais post para a barra Livros.
Será que vai chamar o listar livros?
Vamos ver.
Para poder demonstrar isso eu vou usar o postman que é um programa para poder fazer pedidos de HTTP.
Você também pode usar a linha de comando como o curl e outras coisas.
Você pode usar o que você quiser mas eu vou usar o postman para esse exemplo.
Tem aqui o site do postman, o navegador getpostman.com.
Você pode ir aqui e baixar o aplicativo.
Esse postman era uma extensão do navegador mas agora é o próprio programa aplicativo.
Aqui eu vou abrir o postman e você pode mudar o verbo do pedido de HTTP em vez de get
e vou por post e você pode pôr a URL HTTP localhost 337 barra Livros.
Vamos ver aqui.
Eu vou rodar o servidor aqui que eu não estou rodando.
Go, Run, Main, Portugou.
Rodando na porta 337.
Vamos primeiro dar o get.
Get, Send, tem três livros como a gente já esperava.
Agora vamos dar o verbo para post que será que vai acontecer.
Olha só.
Olha só.
Até fazendo o pedido post ele foi bater lá na rota barra Livros que deve ser só para
pedir o get.
Se você não especificar que método vai ser ele vai responder batendo no listado Livros
para qualquer verbo de HTTP.
Agora uma maneira de você checar qual verbo que é pode ser assim lá no listado Livros
você tem esse R aqui que é a variável que contém informações sobre a requisição
ou o pedido de HTTP.
Você poderia checar essa maneira aqui e se o R ponto method não for get você pode
retornar e não fazer nada.
Dessa maneira aqui.
Tá?
Então vamos testar isso.
Mata o servidor com Ctrl C e convive ele e roda ele novamente.
Eu posto o mail e vou dar o post agora de novo.
Note que não veio nada.
Nesse caso aqui deu 200 OK mas não veio nada.
Tá?
O que?
Eu cheguei se o método não era get verdadeiro.
Dá o return na mesma hora sem fazer nada e a resposta foi em branco.
Tá?
E você quiser saber mais sobre esse método aqui no navegador eu vou lá no site do gollang.org
clica em packages, pacotes e você escolhe a HTTP lá na lista que tem a referência aqui.
Você pode olhar o que é que tem dentro do método do R.
O R é request, tipo request.
Então vai aqui type, type request com R.
Então arrasta lá pro R, esse aqui e você vê que é uma estrutura e tem esse método aqui dizendo que específica o método HTTP, get, post, put, etc.
Não sei o que, não sei o que.
Tá?
Fazendo com a string.basia significa get pra requisições de cliente.
Tá bom? Então essa é a maneira mas eu não vou fazer assim.
Você pode fazer também de outra maneira aqui.