Um momento
Aula 10
Cursos / Como Criar uma API JSON em Golang - CRUD Simples
Como Criar uma Rota para Buscar um Livro - Golang API JSON

Nesta aula continuamos a implementação da rota para buscar um único livro.

Usamos o método Atoi do pacote strconv para converter o id do livro para um int, porque o mesmo aparece originalmente como uma string no r.URL.Path.

Depois disso, temos que procurar o livro na lista de livros. Usamos o id do livro como valor de comparação. Se o livro for encontrado, codificamos a estrutura Livro para formato JSON e enviamos como resposta ao cliente, com a ajuda do pacote json e seus métodos NewEncoder e Encode.

Se o livro não existir, isto é não há nenhum livro cujo id é o fornecido pelo cliente, enviamos uma resposta com código de status "404 Not Found" (404 Não Encontrado). Este pode ser enviado através de uma chamada do w.WriteHeader, com o argumento sendo o número do código: 404. Tem também uma constante do pacote http que podemos usar: http.StatusNotFound.

Summary

Resumo da Aula de Golang: Implementação de uma API de JSON

Introdução

  • A aula continua a implementação da API de JSON, utilizando Golang.
  • O foco é a busca de livros pela ID.

Implementação

  1. Extração do ID:

    • O ID é extraído da rota utilizando servemux.
  2. Busca na Lista de Livros:

    • Utiliza-se um loop para procurar o livro na lista.
    • Se encontrado, retorna o livro; se não, retorna "not found".
  3. Criação de Encoder JSON:

    • json.NewEncoder(w) é usado para criar um codificador.
    • O livro é codificado e retornado como resposta.
  4. Tratamento de Erros:

    • É importante lidar com os erros retornados por strconv.Atoi.
    • O uso do underscore _ é sugerido para ignorar variáveis não utilizadas.
  5. Testes com Postman:

    • A API retorna "not found" para IDs inexistentes (ex.: 123).
    • Para IDs válidos (ex.: 2), retorna os dados do livro.
  6. Configurações de Cabeçalho:

    • É necessário definir o cabeçalho Content-Type como application/json.
  7. Refatoração:

    • Possibilidade de criar funções auxiliares para melhorar a legibilidade.
    • Sugestão de testar e lidar com casos especiais, como caminhos vazios.

Conclusão

  • A nova rota /livros/{id} foi implementada.
  • O conteúdo do caminho é tratado adequadamente.
  • A conversão de string para inteiro e o tratamento de erros são detalhados.
  • Um retorno para evitar execução desnecessária foi adicionado.
  • Foi proposto que os alunos refatorem o código e explorem a busca em diferentes cenários.

Até a próxima aula!

Video Transcript

Olá pessoal, estamos de volta com mais uma aula de Golang. Vamos continuar a implementação da nossa API de JSON, crudisimples em golang. Vamos continuar a buscar a livro. Já extraímos o ID da rota, toda essa parafernal aqui, porque estamos usando o servemux que eu pado no lugar do tp. Então vamos continuar. Depois de extrair o ID, vamos fazer uma busca na lista de livros lá. Você pode usar um loop e se você encontrar o livro cujo ID foi o ID que foi fornecido, então a gente retorna isso como resposta, então a gente dá o not found, não foi encontrado. Vamos lá. O dação foi aqui, foi índice vírgula, livro, dois pontos igual range, não me dá variar os livros. Então se o livro, o ID do livro, o livro ponto ID foi igual a o ID que foi passado, fornecido, note que a gente já convertei para int inteiro, nós vamos dizer que vamos. Então nesse caso vamos fazer o que? Nós vamos, primeiro a gente tem que criar um encoder, JSON new encoder com o W, depois de criar o codificador, pode já encode, pode picar o livro. Se não, se não controlada, você pode já aqui no final, W.write header, HTTP, status not found, não foi encontrado. Vamos ver se isso funciona. No terminal, compilando a, STR convia, a, o problema aqui é que o a retorna em duas coisas, deve ser o segundo argumento, o erro. Deixa só olhar no documentação para confirmar. Vamos lá no Golan.org packages, STR conv, está aqui um exemplo, eu esqueci do erro que é o atoy retorna em duas coisas, primeiro é torno inteiro, convertido e o segundo é valor de ator, não é o erro. Então vou aqui no, em HTTP, como é que vai fazer isso? Qual é o tipo do erro? Que eu não sei. Vamos ver aqui, índice, ade o atoy, int error, então é do tipo error, erro. Vamos aqui, error, vamos ver como é inesperado, deve ser porque a minha sintaxi não está correta, vou fazer assim, funciona, tem problemas, declaro o erro mas não zo, índice declarar mas não zo, então o gol reclama que eu não usei o erro, não usei índice e quando daí normalmente nesse caso na linha E83, se você não usar o índice pode usar o underscore aqui no lugar que ele vai parar de reclamar, agora só dá reclama do erro, então o erro aqui eu posso pôr o underscore, ele parar de reclamar mas aí eu vou esquecer de lidar com o erro, então exerce isso para você se quiser lidar com o erro, tá bom? Com isso vamos tentar novamente, sabe do arrodando, ade o postman, vamos testar esse, not found, não encontrou, certo? 1, 2, 3, não encontrou porque não tem livro com id 123, vamos ver id 2, id 2, id 2, título caso, autor, videato, corria, certo mas eu acho que o headers, cadê, opa, não veio com Jason o contact type, porque eu não fiz aquele set, tá, então tem que fazer isso também anualmente se lembra do header set aqui, temos que fazer lá também, note que cara a rota a gente tem que fazer isso, vamos lá você pode até arranjar uma maneira de refatorizar isso tudo para não poder fazer a mesma coisa sempre, pode até fazer uma função comum que faz todas essas coisas então aqui em cima, no buscar o primeiro de tudo vamos lá, o w.header, chamada da, dá o set no contact type para application, barra de Jason, para resposta C, desse tipo certo, vamos no postman, agora esqueci de compilar e rodar, reiniciar o servidor, compira, reinicia, certo, postman, manda lá, agora está application Jason legal, voltando ao corpo, bari, agora está melhor de ver bem, bem, bem, bem, se eu botar uma barra aqui o que acontece, oots, não encontrado, então por que, por que se eu pôr uma barra aqui o length lá do part, vai ser 4 então tem esse detalhe também, né, então eu deixei, se você quiser mexer com isso para poder aceitar ou não esse formato aqui com a barra tá, tá, 200 ok, tudo certo, vamos testar 3, não causo muro, legal, 1, agora a ni, 4 não tem, 404 not found, não encontrado, tudo certo então se eu não tiver nenhum inteiro, no town, não encontrado, mas ele deve até fazer a busca, não é muito feciente se fosse um boco de idade, então tem esses detalhes, casas especiais que você tem que ver se tivesse assim dessa maneira o que será que acontece, o que vai bater, se você da quebrar a string as partes vão ser vazia, livros e vazia então seria vazia, livros e vazia aqui, se não tivesse o id, puxou uma netria 3, maior que 3, não, vai aqui, pega o id, ele dava o strconf no vazia, não sei o que aqui dar, se fosse vazia, será que dava erro, talvez, poderia até dar erro, por isso que eu deixei como exercício não sei, cabe você ver ai, tá bom, vou deixar para você, voltando aqui, tudo certo, vamos avisar o que fizemos acurriamos a nova rota aqui, barra, livros, barra, na hora de você dizer barra, livros, barra, com essa barra aqui, todos os subdiretórios dentro desse caminho serão casados, combinação vai corresponder vai chamar buscar a leira aqui, primeiro de tudo setrara para resposta cj, quebra o rl.path que é o caminho, barra livros, barra alguma coisa, quebra em uma lista, checa que tiver mais coisas que a gente não quer saber, eu dei o nome para, mas por melhor é isso enfim, extraímos o id, convertimos um stream para um int através do pacote strconf.atoi fizemos aqui um for loop para poder encontrar o livro lá no nosso list, e no final damos um encode, finalmente damos o write header aqui e até esse que devia estar errado, esqueci do return aqui, esqueci do return, se não ele vai continuar e vai até fazer o write header aqui se bem que não fez, é melhor ter o return lá, porque a gente não quer continuar para cá e se não encontrar nada, a gente dá o status not found, encontrou nada você pode refatorizar isso aqui, extrair para funções auxiliares para melhorar as encodinhas enfim, 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: