Um momento
Aula 09
Cursos / Como Criar uma API JSON em Golang - CRUD Simples
Como Extrair Parametro de Rota Manualmente com o ServeMux do Golang http

Nesta aula iniciamos a implementação da rota de buscar por um único livro.

Podemos acessar o valor da URL da requisição através do parâmetro r, que é do tipo *http.Request.

Depois de obter o caminho da URL, que tem padrão /livros/{idDoLivro}, nós temos que dividir a string em várias partes para obter o id do livro. O pacote strings tem um método para nos ajudar fazer essa operação.

Como a parte da URL que contém o id do livro é uma string, temos que converter esse valor para um inteiro. Usamos o pacote strconv para a conversão de uma string para um número inteiro.

Summary

# Resumo da Aula de Golang

Na aula de hoje, continuamos a implementação da nossa API em Golang, onde já criamos uma rota para listar todos os livros. O objetivo foi adicionar uma nova rota para buscar um livro individual pelo ID.

## Estrutura da Rota

- A rota será construída no formato: `GET /livros/{id}`.
- Exemplo: `GET /livros/2` para buscar o livro com ID 2.

## Acesso ao Parâmetro de Rota

1. **Roteador Padrão**: A API está utilizando o `serveMux`, que é o multiplexer padrão do pacote `http`.
2. O `serveMux` não suporta de forma conveniente a extração de parâmetros da URL, então precisamos implementar isso manualmente.
3. O primeiro passo é capturar a rota requisitada usando `R.URL.Path` e dividir a string usando o método `strings.Split`.

## Implementação

1. Importar o pacote `strings`.
2. Usar o método `Split` para quebrar a rota onde houver `/`.
3. Verificar se a array gerada contém mais de três partes para garantir que temos o ID necessário.
4. Converter a string do ID para um inteiro utilizando o pacote `strconv` e a função `Atoi`.

## Código Base

- Num exemplo prático, o código deve seguir um padrão de verificação para garantir que o ID é válido e existirá na lista de livros.
- Se o ID não for encontrado, a resposta deve ser um erro HTTP 404.

## Próximos Passos

Na próxima aula, iremos implementar a lógica para buscar o livro da lista baseada no ID que foi extraído e convertido.

Até a próxima!

Video Transcript

Olá pessoal, estamos de volta com mais uma aula de Golang. Vamos continuar a implementação. Nossa API de JSON, fazer um crude simples. Já criamos a rota para poder listar os livros, todos os livros. Vamos a rota para poder adicionar um novo livro, rota de cadastro. Que tal agora a gente fazer uma rota para poder buscar um livro por ID? Isto é somente um livro individual. Você passa o ID através da rota, por exemplo, barra livros, barra dois. E o ID do livro será dois, então ele vai buscar pelo livro cujo ID é dois. Então vamos começar. Então o problema primeiro será como a gente vai acessar o parâmetro de rota em golang. Nós estamos usando o roteador padrão que vem com HTTP, que é o serveMux. Se você vai aqui no listen and serve, aqui na função a gente chamou para poder iniciar o servidor. A gente não passou nenhum argumento, nenhum segundo argumento. Por causa disso ele vai usar o multiplexer padrão que é o serveMux. Eu vou aqui no navegador, na documentação, pacotes na verdade, HTTP para te mostrar do que eu estou falando. Vou buscar o serveMux. Tá bom, então está dizendo aqui se o segundo argumento for new usa o default serveMux. Então, o default serveMux, esse aqui, padrão, se eu buscar pelo serveMux, se tem documentação em algum lugar aqui, deixa eu ir lá em cima em vez de buscar no índice. Type serveMux. O serveMux é um multiplexer para a revisição HTTP. Tá dizendo que ele faz aquele casamento de padrões e faz a correspondência entre aquilo que você editou. E tem os detalhes. Então, os metros é o handle, o handlefunk, a gente usou o handlefunk e assim por diante. Então, esse serveMux padrão não tem suporte para obter parâmetros de rota de maneira conveniente. Então, a gente vai ter que fazer um pouco mais de coisa em vez de só falar na rota barralivros, barra, por exemplo, barralivros, voltando aqui no editor de texto. Eu vou aqui não configurar rotas, eu vou tirar esse cadastralivo, vou fazer outro ali. Não dá para a gente fazer, por exemplo, essa maneira barralivros, barra, o ID dentro de essas coisas aqui. Então, a gente vai ter que fazer de maneira mais detalhada. Então, vamos começar. Então, a rota vai ser barralivros, vai ser get barralivros, barra, um ID, por exemplo, um, dois, três. Vamos fazer isso. Então, vamos deixar esse outro separado desse agora. O detalhe é que essa barra depois do barralivros aqui, porque se você não tiver a barra, ele não vai bater aqui nessa função que a gente vai criar. Eu vou dizer aqui buscar livro. E vou fazer a função aqui em cima, funk, buscar livro. W é um HTTP response writer e o R é um ponteiro para HTTP request. Então, vamos primeiro fazer o seguinte, vamos dar um FMT println para poder imprimir qual é a rota que a gente está batendo aqui para a gente divulgar e saber o que está acontecendo quando a gente adicionar essa barra aqui. Então, eu vou falar o seguinte, para você obter a rota que foi requerida, você fala R, ponto RL, todo em maiúsculo, ponto path. Ok? Calminho. Então, vou aqui no terminal, vou rodar o servidor. Vamos no pulse man, testar essa rota aqui. Eu tenho um get aqui no barralivros, senão a gente não vai bater lá na... Aquela coisa que a gente acabou de criar. Se você adicionar a barra, ele vai bater lá, porque criou o log aqui. Então, se você adicionar qualquer coisa aqui, por exemplo, 2, 3, vai aparecer lá, no R, ponto RL, ponto path. Note que eu posso ter mais coisas que ele vai adicionar. Então, esse é um detalhe que você vai saber. Qualquer coisa depois do barralivros barra vai ser capturada. Mas a gente só está interessado nessa parte aqui, nesse padrão. Tá? Então, se você adicionar essa barra ao barralivros, o padrão que vai ser... Casado, vai ser qualquer coisa depois do barralivros barra. Como a gente viu aqui no console log, não é só uma coisa. Pode ser quantas coisas quiserem. Subdiretores do caminho. Tem esse detalhe que você tem que saber. Vamos começar aqui. Primeiro a gente vai ter que quebrar essa string do path em várias partes. Então, a gente vai fazer uma espécie de array. Vai quebrar... Dá o split na barra. Isto é, se você tiver barralivros barra 2, 3, por exemplo, isso vai se tornar uma array, né? Que vai ter o espaço em branco, porque não tem nada antes da barra. E livros, e vai ter um, dois, três. A gente está quebrando a string na barra, tá? Para poder extrair a parte que a gente quer, o ID. Mas ele também vai extrair livros e o espaço em branco aqui no começo. Tá, então vamos fazer isso. Pegue o rl.path que tem essa string. Nós vamos chamar o split e vamos usar na barra. Mas o split está no pacote strings. Então vamos importar lá em cima. E vou adicionar strings. Nesse pacote strings nós temos esse método, a de split, que vai quebrar a string em várias partes. E fazer essa lista de strings. Eu vou quebrar na barra, que é o segundo argumento. Eu vou chamar de partes, dois pontos igual. Agora, parte zero, sub zero, vai ser em branco. Sub um vai ser esse. E sub dois vai ser esse aqui, um, dois, três. Que é o que a gente está interessado. Se tiver mais alguém digital ou algo assim, não sei o que, a gente não vai se interessar. Então vamos supor que só tenha três. Se o lento, parte for maior que três, vai ser um não encontrado, qualquer coisa assim. Você pode fazer o w right header, http, status, not found. Alguma coisa assim só para poder retornar. Dizer que a rota não foi encontrada. Uma coisa bem simples aqui, mas não é muito detalhada, porque a gente não tem a maneira de suporte da rota, parâmetros de rota bem legal. Normalmente, esse suporte é melhor em outros placotes de rotiamento, como o Gorilla Max. Mas a gente ainda não vai usar isso. Então vamos continuar. Se tiver três partes, a gente bate o padrão que a gente quer. Então vamos pegar um, dois, três lá. Então o id, só vou usar va para você saber que tipo é. Vai ida do tipo int. Será que a gente, os livros a gente definiu com int para o id? Então tem que converter a string para int para poder comparar. Então vai ida do tipo int vai ser o que? Vai ser o parte sobre dois. Mas a gente tem que converter a string para int. Como fazer isso? Será que funciona só assim? Vamos ler. Então deu eu. O que eu esqueci aqui? Esqueci do length. Parâmetros da rota, desculpa. linha 76, o length, parâmetros, é depois de final de partes. Então não dá para usar partes dois, porque é string, não é tipo int. Então a gente tem que converter a string para int. Como fazer isso? A gente tem que usar o pacote strconf, que tem várias funções para converter a string para outros formatos. Do strconf tem essa função chamada atoi. Atoi é a, tu, ai. Ai é inteiro. Então vamos converter o cara para inteiro. Então passa com o argumento. Vamos importar strconf lá em cima. Strconf converter string. string converter. Onde estávamos? Pronto, pegamos o midê para buscar. Agora só nos resta procurar se tem realmente o livro cujo id foi especificado na lista de livros que a gente tem aqui. Chamada de livros. Vamos fazer isso na próxima aula. Até mais.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: