8 - Criando o Endpoint para Alterar Dados (PUT)

Agora que nossa API já consegue cadastrar e listar, precisamos aprender a atualizar os dados de um produto que já existe no sistema. Nesta aula, usaremos o método PUT e descobriremos como capturar informações passadas diretamente na URL.

Passo 1: Atualizando o arquivo main.go

Abra o seu arquivo main.go e insira a nova função alterarProduto, mapeando a rota PUT /produtos/{codigo} na função principal do servidor. Abaixo compartilho a estrutura da nova função:

// Função para atualizar um produto específico
func alterarProduto(c *gin.Context) {
	// Extrair o código do produto via URL
	codigo := c.Param("codigo")

	// Referência do struct Produto
	var produtoAtualizado Produto

	// Extrair informações do JSON e atribuir na referência produtoAtualizado
	if err := c.ShouldBindJSON(&produtoAtualizado); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"erro": err.Error()})
		return
	}

	// Laço de repetição para localizar o produto na lista e modificar
	for indice, produto := range produtos {
		// Condicional
		if produto.Codigo == codigo {
			produtoAtualizado.Codigo = codigo
			produtos[indice] = produtoAtualizado

			c.JSON(http.StatusOK, produtoAtualizado)
			return
		}
	}

	// Retorno do endpoint caso o produto não seja encontrado
	c.JSON(http.StatusNotFound, gin.H{"mensagem": "Produto não encontrado."})
}

Agora podemos atualizar nossa função principal, abaixo a estrutura completa atualizada:

// Função principal
func main() {

	// Roteador
	r := gin.Default()

	// Rotas
	r.GET("/", helloWorld)
	r.GET("/produtos", listarProdutos)
	r.POST("/produtos", cadastrarProduto)
	r.PUT("/produtos/:codigo", alterarProduto)

	// Configurar o servidor
	r.Run(":8080")

}

Passo 2: Testando a Alteração no seu Cliente HTTP

Para testar esta nova rota, siga estes passos ordenados dentro do seu testador HTTP (como Thunder Client):

  1. Primeiro, faça um cadastro usando a rota POST para colocar um aluno válido na memória. Copie o campo codigo que o servidor gerou para ele.
  2. Mude o método para PUT e altere a URL adicionando o código copiado no final (ex: http://localhost:8080/produtos/COLE_O_CODIGO_AQUI).
  3. No corpo (Body) da requisição, modifique o nome, categoria ou valor e clique em enviar.

O servidor retornará o status 200 OK com um novo objeto do tipo Produto atualizado.