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

Nesta aula iniciamos a implementação da rota para excluir um livro.

A função para lidar com a requisição para excluir um livro começa com a extração do id do livro que é fornecido através da URL. Usamos o strings.Split para dividir a string em partes.

Temos também que converter a string que contém o id do livro para o tipo int. Mas isso não é feito até o final da aula. O pacote strconv tem o método Atoi, que é útil para converter de string para int.

Antes de tentar excluir um livro, temos primeiro que saber se o mesmo existe.

Como armazenamos a lista de livros em uma fatia de livros, []Livro, temos que usar uma estrutura de repetição para procurar o livro.

Se o livro não for encontrado, mandamos uma resposta com o código de status "404 Not Found" (Não Encontrado).

Se o livro existir, temos que removê-lo da lista.

Depois de remover o livro da lista, enviamos uma resposta com o código de status 201 No Content (Sem Conteúdo). Isso porquê não hão dados adicionais a enviar para o cliente quando um livro é excluído.

Summary

Resumo do Método para Excluir Livro

O objetivo é implementar um método para excluir um livro em um servidor. A abordagem envolve verificar o método da requisição e determinar se se trata de uma operação de busca (GET) ou exclusão (DELETE).

Estrutura da Implementação

  1. Verificação do Método da Requisição:

    • Se r.method for GET, busca-se o livro.
    • Se r.method for DELETE, chama-se a função para excluir o livro.
  2. Função Excluir Livro:

    • Parâmetros:
      • LW (http.ResponseWriter)
      • r (*http.Request)
  3. Extração do ID do Livro:

    • O ID é extraído da URL (r.URL.Path), dividindo a string com split e acessando o respectivo índice.
  4. Verificação da Existência do Livro:

    • Se o ID não corresponder a nenhum livro, retorna-se um status 404 (Não Encontrado).
    • Caso exista, remove-se o livro da lista.
  5. Exclusão do Livro:

    • Realiza-se um loop pela lista de livros para encontrar o índice do livro a ser excluído.
    • Se encontrado, a lista é atualizada para remover o livro.
  6. Retorno da Resposta:

    • Usa-se WriteHeader para atuar com o status 204 (Sem Conteúdo) após a exclusão.
  7. Tratamento de Erros:

    • Em caso de erro na conversão do ID (string para int), retorna-se um status 400 (Bad Request).

Testes Realizados

  • Testes com requisições GET e DELETE foram realizados no Postman.
    • DELETE de livro existente retorna status 204.
    • GET após a exclusão confirma que o livro não está mais na lista.
    • Exibição de erros apropriadamente para ID inválido (400) e livro não encontrado (404).

Conclusão

O método de exclusão foi implementado com sucesso, e a funcionalidade foi verificada através de testes práticos, garantindo que o sistema retorna os status corretos para cada situação.

Video Transcript

Então vamos continuar e fazer o método para excluir o livro. Vamos lá. Então quando bater nessa rota aqui, barra livros, barra o id do livro, se for get vai bater lá no buscador do livro. O que está escrito agora vai ser qualquer método. Se lembra do ar.method, pode ser get, pode ser post, pode ser put, que é o que a gente vai fazer agora e pode ser o delete, quer dizer, a gente vai fazer o delete, não o put, put depois. Então a gente vai ter que checar aqui o método para poder saber se nós vamos buscar ou se vamos excluir. Então vamos aqui, se o método da requisição se for get, nós vamos buscar o livro. Else, se o r.method for delete, é o que a gente vai fazer agora. Vou chamar a função excluir livro que a gente vai fazer, vamos passar o wr como argumentos aqui. Então vamos definir excluir livro aqui. Pode ser qualquer conta aqui, por exemplo. Vamos aqui em cima, antes de rotiar, vou decorar a função, excluir livro, será que eu pus um singular? Certo? Aquela mesma coisa, primeiro parâmetro LW, que é do tipo response writer, http.response writer. E o segundo parâmetro é o r da requisição ponteiro para o http.request. Pronto. Ok, vamos excluir o livro primeiramente. Então a maneira que o usuário vai fazer o seguinte, vai fazer uma requisição, por exemplo, barra livros, barra 123 para dar tal livro, cujo id é 123. Primeiro a gente tem que extrair esse id da rota. Da mesma maneira que a gente fez anteriormente no buscar livro. Você lembra? Buscar a livra aqui. A gente quebrou o r.rl.path na barra para poder obter o id, que é o partis elemento lá com índice 2, que é o terceiro elemento, conta do 0, 012. Então aquela mesma coisa que você quiser copiar aqui. Note que até essas coisas aparecem. A mesma coisa como essas, se você pode pensar em uma maneira de reutilizar o código, talvez passar argumento do partis aqui, como a gente já está pegando o partis e essas coisas. Ou até o id, que a gente sabe que partis 2 é o id. Está certo? Então vou deixar aqui. Se quiser, talvez eu coloquei o id para buscar livro, excluir livro. Uma sugestão. Pode ser que você ache o seu sol, se não, melhor. Enfim, vamos continuar. Vamos no excluir livro. Vamos lá extrair partis. rrl.path, nós vamos dar o split na barra. Isso vem dos strings, ponto. Depois disso, o id, o livro vai ser excluído, vai ser partis sobre 2. A condição é que a gente tenha algo já no path. Por isso, isso sempre vai funcionar devido ao if aqui. Lembra? O if tem a condição, a gente sempre vai saber que partis no índice 2 vai ser definido. Com isso, extraímos o id. Para excluir um livro, primeiro, a gente tem que saber será que esse livro existe? Se o livro não existe, nós vamos dar o status 404, não encontrado. Mas se existe, nós vamos lá e atualizar a lista de livros e excluir o livro, cujo id a gente passou, e a resposta não precisa ter nada. Pode usar o no content, o status 201, se não me engano. Vamos lá. Vamos fazer o seguinte, vamos fazer um loop no livro. Lembra do livro aqui? A variável de livros é que tem os livros. Por exemplo, se eu quisesse deletar o livro 2, teria que fazer um loop nessa variável para ver achou 2. Eita, achou 2, então vou excluir da variável. Se passar por toda a lista, não achar nenhum, vamos dar o 404. Vamos lá. Vamos ver aqui. Vamos dar um for, índice, livro range, livros, então dá um loop, pego o livro, faz um range, tem as duas variáveis para o índice e para o livro, para cada interação, repetição. Se o livro da repetição, o id, foi igual ao id que foi passado, é o que a gente achou. Vamos fazer o seguinte, vamos dizer que o índice do livro que achou, eu vou fazer uma variável aqui, índice do livro, vou fazer essa variável aqui, índice do livro, começa a dar de menos um, para dizer que não achou ainda, e quando achar o índice, você seta o índice do livro, por exemplo, é o índice aqui, e pode até quebrar o loop, dizer, break, e achou, se não, no final, o índice do livro vai ser menos um, o que significa não achou. Então, se o índice do livro, o menor que zero, estude, menos um, por exemplo, significa não achou, a gente vai retornar o 404, o livro não é encontrado, por exemplo, o W, se lembra como é que passa o status code, write header, e qual é o número, 404, mas pode usar a constante, http.stats, not found. E dá o return aqui para não fazer mais nada, depois desse if. Se não, significa que o índice do livro é maior ou igual a zero, isto é, achou o índice do livro, lá na lista dos livros. Neste caso, a gente tem que atualizar a lista de livros para poder escolher aquele livro no índice aqui, índice do livro. De várias maneiras de fazer isso, uma maneira, por exemplo, se eu quiser pegar, deixa eu te mostrar aqui, se eu tiver livros A, B e C dentro de uma lista, por exemplo, e D, para poder remover o B, você pode pensar assim, vamos pegar a primeira parte, a esquerda de B, que é essa lista, e vamos concatenar, isto é, combinar com a lista à direita do B, que é o C e o D, isto vai formar o quê? O A, C, D isso é uma maneira de pensar nisso. Então, vamos aqui, nós podemos pegar essa, como é que pega a lista A, livros é a lista, você vai pegar do primeiro índice que é zero, até 15, o índice do livro, não é? A parte que o índice do livro não é incluído nessa nova lista de coisas. Então, vai pegar tudo à esquerda, o elemento cujo índice é o índice do livro. Isso vai dar essa parte aqui, mas como é que pega do lado direito? Você vai falar livros, bem, começa do índice do livro, mais um, até o final, o final vai ser o link do livro. O nótice não é incluído, então, vai estar tudo certo. Então, temos as duas partes, a esquerda e a direita do índice do elemento aqui do livro. Então, nós podemos pensar, vamos pegar essa lista com o cantonar com a outra. Uma maneira de fazer isso é assim, você pega o apende, bem, apende para essa lista aqui, as outras coisas. Por exemplo, se tivesse c, d, é esse por diante. O problema aqui é como é que converte vários argumentos de uma array, de uma lista aqui. Você pode usar um ponto, ponto, ponto aqui. Pega esse aqui e ponha aqui. Tá meio confuso? Vamos fazer assim. Lá do esquerdo e vou botar essa variável aqui. Lá do esquerdo para ficar melhor de ler. Entender. Lá do direito. Lá do direito. Tá. Então, esse aqui vai gerar uma uma fatia lista de uns elementos. Se tivesse esse exemplo de a, b, c, d, seria e o elemento o índice seria 1, por exemplo, b, ele ia pegar o a, botar em lá do esquerdo, ia pegar o c e o d, seria o lado direito e formaria uma nova lista com a, c e o d. E essa nova lista nós vamos atualizar, né? Reatribuir o valor a, aos livros. Certo? E finalmente você dá o W write header com o 201 que eu acho que é 201, que eu o status no content sem conteúdo, que não retorna nada, quando você exclui alguma coisa em rest. Vamos ver se isso funciona e depois vamos recapitular o que a gente fez. Eu vou devolver um terminal go around em botogorre, compiler e a executa o servidor deu um erro aqui int string esqueci de converter o id para um int, como é que converte um string para o int com strconve. strconve ponto que atoie a2i partes será que esqueci de alguma coisa? atoie vamos ver lá no outro buscar livro, tá certo? strconve ah, tem um erro, né? tem isso também erro se der o erro alguma coisa deu pause se erro não for nil, a gente vai ter que fazer alguma coisa se tornar um erro talvez o erro seja na parte do a parte talvez o pessoal passou um id que não é inválido que não é um int essas coisas sim então você pode fazer um erro aí w write header http aí o negócio que fica, qual será o código que a gente passa? o erro ou 500 depende do erro então vou botar só sei lá, bad request mas você pode mudar se você acha que esse não tá certo e se der o erro é dar o bad request e retorna vamos testar isso agora vou lá no postman vamos pegar a lista de livros primeiro vou tirar o barra 2 só no barra livros tem um, dois, três certo? quero vou montar a tela aqui pra você ver mas, adeus negócio bom então vamos testar o delete vou mudar o verbo pra delete vou deletar o livro 2 no barra 2 noto que a obteve 204 no content sem conteúdo vou pra nova, nova aba aqui e vou botar get livros barra livros a gente espera que o livro cujo IDE é 2 que não esteja mais na lista e realmente não está bem, agora eu quero também testar aquele bad request por exemplo, se eu botasse letras em vez de inteiros deu 400 bad request ah ou agora vou testar coisa que não existe um, dois, três, não existe esse livro deu 404 não encontrado tá vamos deletar tudo agora vou deletar o livro 1 vou deletar o livro 3 agora não tem mais nada vou tentar deletar o 3 de novo 404 não encontrado tá bom então, vamos revisar o que a gente fez adicionamos aqui uma nova novo endpoint delete, barra livros, barra o IDE do livro primeiro a gente extrai o IDE e converte de string para int se der algum erro na conversão do IDE a gente manda bad request de volta pro usuário e torna sem fazer mais nada se não a gente faz um loop na lista de livros vamos supor que a gente não encontrou o livro ainda menos um significa que o livro não foi encontrado essa variável armazena o índice do livro na lista se você achar um livro cujo IDE foi fornecido a gente atribui a gente manda o índice na lista essa variável índice do livro para poder depois fazer a exclusão se não encontrou o livro, isto é, o índice fora menos um a gente manda lá no HTTP status não encontrado se não o livro foi encontrado nós continuamos no código vamos atualizar a lista e excluir o livro cujo IDE foi passado pela rota paramos de rota a gente vai de várias maneiras fazer isso uma maneira que eu fiz aqui usando a pen eu criei duas listas novas vou fatir aqui e combinei em uma só pensando da maneira eu pego a lista de lado esquerdo e eu doo a tend eu adiciono essa lista várias coisas eu usei esses três pontos para poder converter dessa lista para argumentos separados por uma vírgula e finalmente retorno HTTP status no counter para 201 para dizer que não tem conteúdo na resposta de exclusão tá bom? pressa o like até a próxima
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: