Um momento
Aula 45
Cursos / Como Criar uma API JSON em Golang - CRUD Simples
Validacao de Registro no Servidor de Golang - Aula de Go API JSON MySQL

Modificamos a função de cadastrarLivro para efetuar validação do cadastro. Isto é, verificamos se as propriedades do Livro enviadas ao servidor foram preenchidas corretamente.

Se o Autor do Livro não for fornecido, o servidor deve responder com o código de estado 422 Unprocessable Entity. Pode-se usar a constante http.StatusUnprocessableEntity em vez do valor 422.

Usamos o Postman para testar a requisição e resposta da API.

Summary

Resumo da Aula de Golang

Nesta aula, o instrutor continua a implementação de uma API em Golang, focando na modificação da função cadastralivro para utilizar um banco de dados e adicionar validações.

Principais Pontos Abordados

  1. Validação da Entrada:

    • O instrutor destaca a importância de não permitir a inclusão de livros no banco de dados com campos vazios (como autor ou título).
    • Ao não passar o autor, a resposta retornava uma string vazia, o que não é desejável.
  2. Implementação de Validações:

    • Foi decidido implementar validações para garantir que campos obrigatórios sejam preenchidos.
    • Caso um campo requerido (como o autor) esteja vazio, deve-se retornar uma resposta com o código HTTP 422 (Unprocessable Entity), indicando que a sintaxe da requisição está correta, mas os dados não puderam ser processados.
  3. Estrutura de Erro:

    • O instrutor sugere criar uma estrutura para resposta de erro, que contém uma mensagem explicativa sobre qual campo está incorreto.
  4. Regras de Comprimento:

    • Para a validação dos caracteres, foi demonstrado que o autor deve ter entre 1 e 50 caracteres, e o título entre 1 e 100 caracteres. Foi implementada validação para essas restrições.
  5. Testando as Validações:

    • O instrutor sugere testar as novas validações usando o Postman, mostrando como diferentes entradas geram as respostas corretas.

Próximos Passos

  • O instrutor sugere que, como exercício, o aluno pense em uma maneira de estruturar a validação para escalar, permitindo a adição de novas regras de forma organizada.

Esta aula foca em assegurar que a aplicação trate adequadamente as entradas do usuário, garantindo que apenas dados válidos sejam salvos no banco de dados.

Video Transcript

O lar pessoal estamos de volta com mais uma aula de golang. Vamos continuar a nossa implementação da API. Nesta aula nós vamos modificar a implementação da função de cadastralivre para utilizar o banco de dados. Então vamos começar. Deixa eu te mostrar uma coisa aqui no curso meu primeiro. Queria aproveitar também essa etapa de modificação para adicionar uma validação. Por exemplo, se eu pegar aqui o que acontece se eu não passar o autor do livro quando eu der o post barro Livres. Vamos ver o que acontece. Olha aqui a resposta. Retorno um autor com um livro, né? O autor é em branco se eu dar o get. Então isso não é algo que a gente queira aceitar. Se não tivesse título, não tivesse nada. Também vai ficar o título vazio. A gente não quer que adsoni récuas no banco de dados com valores vazios. Então por que isso acontece? Bem, porque quando ele vai aqui na etapa de Marshall nós temos essa estrutura novo livro. Aí ele vai e decodifica os valores que foram passados pelo cliente. Mas o cliente não passou nenhum valor. Então os valores iniciais de cada campo dessa estrutura serão os valores zero. Porque a autoaite título são do tipo string. O valor zero de uma string em golang é a string vazia, né? Por isso que ficou. Mas a gente não quer isso. A gente quer modificar isso, adicionar valilação. Se o usuário para o cliente fazer o pedido com algum campo requerido que é vazio a gente tem que mandar uma resposta dizendo opa, teve um problema aqui, por favor, corre de problema. Não podemos criar o cadastral livro. Então a gente vai pensar nisso quando modificar a implementação do cadastral livro. Então vamos começar. Cadastral livro, tá certo? Right header, do creator, ok. Bem, isso não. Pode ser bem isso, porque pode ter problema ao cadastrar. Vamos aqui primeiro. Então o cliente vai mandar o r.body, né? O r.body, certo? Do r.body a gente vai ler, né? IO util. Se tem erro aqui, pode lhe dar com ele também. Se quiser já fazer isso aqui. W right header. HTTP. Vamos dar o bad request e retornar. Se deu problema aqui a leitura desse r.body. Se não, deu tudo certo, ok? Vamos fazer o seguinte. É um variável novelinho, tá certo? A Marshall. Variável novelinho, certo? Não vai precisar dessa parte aqui de criar o 9D, né? A pende porque isso vai ser feito pelo banco de dados. Tem que ter validação aqui. Vamos deixar isso aqui por enquanto. Aí vai ter... Incessão. Banco de dados. Depois a validação se dá certo. Então vamos ver a validação aqui. Bem, então ele vai dar o one Marshall no novo livro, na linha 88. Bem, se o usuário passa... Não passar os dados que a gente quer requerir, né? A gente quer o autor. Vamos começar com o autor. O autor não pode ser em branco. Então vamos lá. Então se o novo livro ponto autor, né? Se o cumprimento dessa string, vamos usar o LEN, LEN, 0, né? Nós vamos dizer que está em valdo. Então isso vai dar o W, write header, HTTP, status... Qual será os dados aqui? Tem um bad request, um processable entry. Deixa eu dar uma lá daqui. Firefus. 422 code. Se eu quer ver a diferença, eu sempre quero... 422, o servidor entende o conteúdo, tipo de conteúdo. E a sintax está correta, tá? Mas não conseguiu processar. Então a gente pode usar isso aqui, porque a sintax está correta, né? O usuário e o cliente passou algo que tem sintax correta. Mas ele não passou os campos requeridos, né? Tá bom. Então vamos aqui. Voltando a editor de texto. Processable end. Esqueci o nome já. Entity. Entity. Eu digitei o nome, que eu acho que é esse nome aqui. Vou estar a confirmar, vamos lá na página do Boulang, tá? Packages. HTTP, né? Net barra HTTP. Nas constantes, index. Quer ver as constantes. Status. Então tá aqui. 422. Processable end. Isso não é um erro de... O que é que tem? Tá? E dá o return. Então vamos deixar essa valedação aqui. Vamos... Só o teste tá aqui. Vamos aqui no postman. Qual é o cadastrar? Se eu tirar o autor ou se eu digitar a vazio. Tirar o autor. Opa, deu 201. O que será? Ah, porque essa linha aqui, linha 80, a gente tem que tirar. Depois o dialeta eu comentei ali em 80. Então ali, leio, leio, leio, tal e tal. Vamos ver aqui de novo. Tá? 422. A note que não tem nenhum erro aqui na resposta. Deberia ter uma resposta boa também. Poderia também adicionar aqui. Vamos ver. JSON, new encoder, W encoder. Uma mensagem aqui. Você poderia criar uma estrutura pro erro, né? A mensagem de erro da resposta. Vamos ver aqui. Se eu botar só uma... Vou criar aqui em cima. Linha 20, vou criar type. Resposta que tem erro, contém erro. Variável, sei lá. Vamos dizer... Resposta com erro. Não sei o bom nome aqui. Struct. Aí vai ter... Vamos dizer erro do tipo string. E no JSON, queremos que sejam letras minúsculos, tá? Então, essa vai ser a estrutura com a resposta com erro que eu vou utilizar pra mandar lá como resposta. E vai ter essa chave chamada erro com a descrição do erro. Isso é só um exemplo. É claro que você pode ver onde ficar e fazer da sua maneira, tá? Voltando aqui à linha 98, lá no encoder. Então, vamos criar um... Vamos criar um literal aqui. Resposta com erro. Aí o erro vai ser... Você pode dizer qualquer maneira. Vou dizer auto. Não. Foi conecido. Vamos ver se funciona aqui. Então, a resposta apareceu aqui. E o auto não foi fornecido, tá? Eu usei a estrutura literal e pode usar dessa maneira aqui. O mitino, né? A chave. Vai em ordem. Se tivesse mais de uma chave, ia na ordem. Separar por vírgula, tá? Qualquer maneira. Essa foi a valedação do autor. Claro que também tem a valedação do título, né? Você pode também adicionar aqui ou, se o langue do novo livro com outro título, ou o quê? Zero, né? Mas aí o problema desse cara aqui é que essa mensagem aqui vai ter errado. Se eu combinar aqui... Tá? Então, estou a esse detalhe, não? Tem que pensar de uma maneira de como estruturar essa valedação de maneira em escala, né? Você pode ter vários. Então... Vamos fazer? Tem que pensar. Vamos usar que você é copiar aqui. Para o título. Mesma coisa. Então, vou deixar como exercício você pensar e re-fatorizar isso, sei lá, fazer uma função genérica. Função que faz a mesma coisa. Ou faz um tipo de estrutura que declarativa, de regras de valedação e tal, e tal. Tá bom? Você vai fazer esse título na linha 103. Então, vamos ver. Lá para o... O autor não foi fornecido. Vamos tirar agora o título. Título não foi fornecido, certo? Se você tiver os dois funcionam. Claro que está na memória ainda. Voltando aqui a editor de texto. Qual é a outra valedação que poderíamos fazer? Se eu tivesse aqui um... Se lembra que a tabela, né? Tem restrições no número total de caracteres para o autor e para o título. Então, voltando ao terminal aqui. Aqui, dizer, do terminal do... Eu quero dar o describe. Livres. O autor tem restrição. Barc as 50. Títulos 100. Vamos ver aqui se eu pegar... Quero um string de 50. Ou poderia diminuir o número só para a gente tabugar, mas... Tanto faz. Vou ver aqui... Dao o do. Vou voltar... De autor com muitos caracteres. Lent. Só quero ver aqui. 46, etc. 48, 9, 50. 50, vamos ver. Vou tentar adicionar aqui no MySQL. Mais de 50 caracteres, tá? Deixa eu ver aqui. Insert into Livros. Autor Título. Aqui é 50. Opa! Eu botei as aspas de novo. Vou ver. 50 caracteres funciona. 51, adicionei mais um. Não funciona, tá? Data to Long Error. Vamos adicionar essa validação do servidor. Se o length do autor for zero, mas também tem o length que tem que ser menor de 51, ou menor ou igual a 50. Tá? Então eu posso fazer o seguinte, aqui eu vou adicionar o, se o length... Poderia copiar de novo e fazer uma nova regra, uma nova função genérica, para arrange de um... tem o... de baixo e de cima esse negócio. Não é possível adicionar aqui. A length do novo livro do autor. For menor ou igual a 50, né? Eu vou dizer autor. Foi ponescida, eu vou dizer autor. Tem que ter pelo menos um caractere e no máximo 50 caracteres, algo assim. Com mensagem assim. Tá? Então vamos testar. Vou sumer, vou pegar o autor e colar. Esse é com 50 vai funcionar. 51 vai adicionar mais um aqui. Opa, porque funcionou? Ah, eu não salvei aqui, deixa eu usar o autor aqui. Vai estar novamente. Tá errado isso, hein? Se o length for zero, falso, ou length... por menor, ah, put... Eu que dizer maior que 50, não é menor. Menor é isso aqui, é o permitido, desculpa. Então vai ser maior aqui, tá? Maior aqui. Que a gente está checando pelas range de erro, né? Não está checando pelo campo vado. Mais 50, tá? Erro, 51, 50, deu certo. Tá bom? Mesma coisa para o título aqui, nesse caso o título seria 100, né? Se você lembra aqui, o título é de 100. Então, o length, novo livro, título, maior que 100. Maior que 100. Vamos testar, salvei. Postman, agora é com o título, vou copiar esse aqui do autor. Vou colar duas vezes para dar 100, sem eu, para adicionar mais um caractério no começo, para dar 101. O título não foi fornecido, tem que mudar essa mensagem, é claro, né? Eu vou botar em um valor aqui, mas você pode botar uma mensagem que você quiser, parecido com essa ou qualquer coisa. Vou deixar como os exercícios para você fazer. Tá bom? Tiro um e funciona de novo. Então é isso pelo validação aqui, tá? Então vamos dar uma pausa, depois a gente continua. Até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: