Aula 40
Terminando o Método de Buscar um Livro usando MySQL - API de Golang
Continuamos a implementação da função para buscar um livro no banco de dados MySQL.
Nesta aula corrigimos uns erros no código: quando se referencia os campos de um Livro, a primeira letra é maiúscula, e não minúscula.
Não precisamos mais da repetição "for" porquê a consulta de MySQL já faz a busca e nos dá o resultado.
Summary
Resumo do Transcript
Introdução
O usuário está trabalhando no terminal com sua tabela de livros, que contém quatro registros.
Testes no Terminal
- O usuário inicia testes com o comando
Go Run
e percebe um erro devido à ausência de um livro. - Para resolver, ele imprime o título do livro usando
fmt.Println
.
Erro Identificado
- O erro "Indefinido" é causado por uma confusão entre maiúsculas e minúsculas na variável
livro
. - O usuário menciona que, em outras linguagens, isso pode ser fácil de errar.
Consulta de Livros via REST
- Ele testa o endpoint para obter detalhes de um livro usando o ID.
- O código responde corretamente para IDs existentes e retorna um erro 404 para IDs que não existem.
- O usuário percebe que o erro 404 apareceu porque ele estava tentando acessar um livro inexistente.
Melhoria no Código
- O usuário decide melhorar o tratamento de erro, adicionando um retorno imediato caso o livro não seja encontrado no banco de dados.
- Ele remove linhas desnecessárias de código, otimizando a função.
Revisão do Código
- O usuário confirma que a lógica de buscar livros foi devidamente ajustada.
- A utilização de
queryRow
é discutida para obter registros individuais. - O tratamento de erro com
scan
é destacado para retornar mensagens apropriadas ao usuário.
Segurança na Consulta ao Banco de Dados
- Ele explica o uso de sinais de interrogação em consultas SQL para prevenir injeção de SQL, garantindo que a entrada seja tratada de forma segura.
Conclusão
O usuário encerra a aula, deixando uma nota positiva sobre as alterações feitas no código e a importância da segurança nas consultas ao banco de dados.
Esse resumo cobre os principais pontos discutidos no transcript, de forma clara e organizada.
Video Transcript
Vamos lá no terminal.
Esses aqui são os meus registros.
Tem quatro registros ou linhas na minha tabela de livros.
Então vamos testar aqui no terminal e vou falar Go Run.
Bem em Portugal.
Como eu não usei o livro por isso que deu problema.
Vamos ver.
Tenho que usar esse livro para ele não reclamar.
E vou dar FmT println aqui do livro.titm.
Só para ele não reclamar.
Indefinido.
Vamos ver.
Ah.
Ah.
Aconteceu aqui.
Criamos a variável.
Vemos o scan.
Pode ver.
Vamos ver.
Vamos ver.
Vamos ver.
Vamos ver.
Vamos ver.
Vamos ver.
Vamos ver.
Vamos ver.
Olha a linha que está dando aí.
175.
Indefinido.
175.
Ah.
Por causa eu botei eleto a minúsculo.
Maiúsculo, né?
Lá em cima o livro.
Maiúsculo.
Isso acontece porque a gente...
Se você trabalha com outras linguagens,
normalmente usa minúsculo.
Então vamos lá.
Não esqueça as vezes.
Vamos lá continuar.
E eu fiz a mesma coisa aqui.
Linha 181.
Lito é maiúsculo.
Vamos lá no cliente de REST.
Aqui é o barra...
Aqui tem o get barra livros barra o ID.
No lugar do ID 3 aqui.
Vamos ver no terminal.
Falou don Casmo certo.
Agora se eu pôr um ID que não existe 4, por exemplo.
404, né?
Vamos ver no terminal.
Um título legal.
Agora foi o título.
Então...
O que aconteceu aqui?
Deixa eu pôr um...
Tito...
Não, parece que não bateu aqui.
Só dá de novo.
Vou tentar novamente.
Então um título legal, um título legal, 3, 4...
Ah!
Ah, é verdade.
Estou voando.
Eu tenho 4 registros.
Queria pôr o que não existe.
Pronto.
O que aconteceu? Eu vi 404...
Antes porque ele estava usando o livro aqui que estava na memória.
Que só tem 3.
Por isso que é a confusão que eu fiz.
Desculpa.
Vamos lá de volta.
Então ele deu o erro.
Acho que ele não tem linha no resultado.
Tá?
Então nesse caso vou fazer o seguinte.
Eu vou só mandar pôr o usuário em 404.
Lembro que a gente tinha aqui já na linha 189.
Deixa eu pegar aqui.
Eu vou colar no erro aqui.
Deixe o log aqui mesmo.
E põe...
Não encontrar, eu vou colocar o return para ele já sair da função.
Parar e não executar nada após isso.
Porque não precisa, né?
Já sabemos que não tem o recorde, o registro.
Deixa eu tirar esse print além daqui.
Mas se tiver, o que acontece?
A gente vai mandar lá o livro.
Então essa parte aqui que a gente vai precisar da 185.
Porque a gente vai tirar daqui e pôr lá fora.
Tira esse loop que não precisa mais.
Já está feito lá pelo banco de dados quando a gente chama o scan.
Não precisa mais desse write header.
Então vamos ver se funciona agora.
Vou reiniciar o meu servidor.
Vou fazer o send aqui.
404 não encontrar, está certo.
Vamos para o 4 que existe.
200 OK.
200 OK está aqui.
Vamos para o 3, 2...
Sem problemas, tá?
E corresponde mesmo ao banco de dados que eu fiz anteriormente.
Tá bom?
Se quiser também pode fechar esse query row aqui.
Vamos ver lá no row se tem a função...
O parece que não tem.
Eu sei que tem o close para rows no plural.
Mas parece que não tem para o singular.
Então não precisa, parece.
Close tem para o dv, close tem para rows,
mas não tem para o row individual.
Então sem problemas, preciso fazer não.
Não tem, né?
Então vamos ver o que a gente fez aqui.
Modificamos o buscar a livro para poder encontrar um livro individual.
Mesmo as coisas de antes já tinham para poder extrair o idê do livro da rota.
A gente usa o query row para só pegar uma linha.
Ou se não tiver, a gente vai dar o status not found
se tem um erro lá na hora do scan.
Não tem erro na hora do query row,
query row só vai pegar aqui o registro,
só na hora do scan que ele vai mandar o erro com o valor de etono.
Eu botei o valor de etono aqui, se der erro, a gente manda lá para cliente, não achamos.
Se der tudo certo, passa dessa linha aqui, não executa.
Essas linhas passam aqui, cria um novo encoder e manda lá esse livro que a gente esconeou.
Note que tem esse sinal de interrogação se você quiser substituir valores dentro da sua consulta.
Aí você põe os valores correspondentes aqui na vírgula.
Por exemplo, se tivesse outros aqui e outros três, você teria que botar mais ABC, IDF.
Então cada um corresponde ao sinal de interrogação na ordem que eles aparecem.
Então esse idê corresponde a esse, o ABC corresponde ao segundo sinal de interrogação
e o dê corresponderia ao terceiro sinal de interrogação.
Isso evita a injeção de SQL, porque você poderia ter recebido qualquer coisa desse idê,
se o usuário fosse o cliente fosse malicioso e pedisse algo ruim.
Mandasse lá uma injeção, um string com conteúdo de SQL e tal,
que seria substituir aqui se você não usasse essa maneira, tá bom?
Então por essa aula é só e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: