Laboratório

- Configuração
- Exercício
- Tarefa
Configuração
- Use a estrutura do Módulo 06
lab6/
├── go.mod
├── cmd/
│ └── api/
│ ├── main.go
│ └── main_test.go
├── internal/
│ └── repo/
│ ├── memoria.go
│ └── memoria_test.go
└── models/
└── produto.go
- Adicione as dependências necessárias:
go get github.com/gin-gonic/gin
go get github.com/go-playground/validator/v10
- Atualize o arquivo
go.mod
:
module github.com/seu-usuario/lab8
go 1.21
require (
github.com/gin-gonic/gin v1.10.0
github.com/go-playground/validator/v10 v10.22.0
github.com/google/uuid v1.6.0
)
Para download do código-fonte, clique aqui!
Implementar uma API RESTful com Gin + validação
Objetivo
Implementar uma API RESTful para o CRUD do Módulo 06, usando Gin
para roteamento
, binding
e validação
, integrando o repositório em memória e logging estruturado
.
Passo a passo
- Atualize o conteúdo do arquivo
models/produto.go
utilizando o código:
Carregando editor interativo...
- Atualize o conteúdo do arquivo
internal/repo/memoria.go
utilizando o código:
Carregando editor interativo...
- Atualize o conteúdo do arquivo
cmd/api/main.go
utilizando o código:
Carregando editor interativo...
Testes da API
Execute o servidor
go run cmd/api/main.go
Teste com curl
- Criar um produto
curl -X POST http://localhost:8080/produtos -H "Content-Type: application/json" -d '{"nome":"Laptop","preco":999.99}'
- Listar produtos
curl http://localhost:8080/produtos
- Buscar um produto
curl http://localhost:8080/produtos/1
- Atualizar um produto
curl -X PUT http://localhost:8080/produtos/1 -H "Content-Type: application/json" -d '{"nome":"Laptop Pro","preco":1299.99}'
- Deletar um produto
curl -X DELETE http://localhost:8080/produtos/1
Tarefa
- Adicione validação para garantir que o nome do produto tenha pelo menos 3 caracteres.
- Implemente um
middleware
para autenticação simples (ex: verificar umheader Authorization
) - Adicione testes unitários para os endpoints usando
httptest
etestify
.
Saída esperada
Console
POST
- /produtos
{ "id": "", "nome": "Laptop", "preco": 999.99 }
GET
- /produtos
[{ "id": "", "nome": "Laptop", "preco": 999.99 }]
- /produtos/1
{ "id": "", "nome": "Laptop", "preco": 999.99 }
PUT
- /produtos/1
{ "id": "", "nome": "Laptop Pro", "preco": 1299.99 }
DELETE
- /produtos/1
(status 204, sem corpo)
Logs JSON (exemplo)
{"time":"2025-06-12T01:15:00Z","level":"INFO","msg":"Produto criado","id":"","nome":"Laptop","preco":999.99}
{"time":"2025-06-12T01:15:00Z","level":"INFO","msg":"Requisição processada","method":"POST","path":"/produtos","status":201,"duration":"1ms"}
Caso de uso prático
Esta API simula um backend de e-commerce, com endpoints RESTful, validação de entrada e logging estruturado, ideal para integração com frontends ou outros serviços.