📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Backend com Golang e Gin. Recomendado revisar antes de começar.
v1.0 — Concorrência, Handlers HTTP, GORM e Arquitetura de Microsserviços em Go
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): API RESTful · Gin Framework · GORM · SQLite/PostgreSQL
- v2: Microsserviço com Cache Redis & Worker Pool
- v3: Comunicação de Microsserviços com gRPC & Protocol Buffers
- v4: Arquitetura Orientada a Eventos com Go, Kafka & OpenTelemetry
🎓 Nível Profissional Simulado: Engenheiro Backend Go Júnior / Pleno. Go (Golang) é a linguagem dominante da infraestrutura de nuvem moderna (Docker, Kubernetes, Terraform). Dominar a criação de APIs REST rápidas e eficientes com Gin e GORM é um dos perfis mais requisitados e bem remunerados do mercado internacional.
—`
Desenvolver uma API RESTful de Alta Performance em Go 1.22 utilizando o framework Gin e o ORM GORM, com endpoints CRUD para gerenciamento de produtos, validação de payload JSON, tratamento de erros com status codes HTTP semânticos e documentação de arquitetura.
—`
“Nosso monolito antigo em Node.js está consumindo 800MB de RAM por réplica e sofrendo com garbage collection. Queremos migrar o microsserviço de produtos para Golang. A API precisa ser enxuta, responder rotas de listagem, busca por ID, cadastro e deleção em menos de 5ms, e consumir menos de 30MB de memória.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Endpoint POST /api/v1/produtos para cadastro com validação de campos obrigatórios. |
“cadastro de produtos” |
| RF02 | Funcional | Endpoint GET /api/v1/produtos para listagem paginada. |
“rotas de listagem” |
| RF03 | Funcional | Endpoint DELETE /api/v1/produtos/:id para exclusão lógica/física. |
“deleção de produtos” |
| RNF01 | Não-Funcional | Latência de resposta P95 inferior a 5 milissegundos. | “responder em menos de 5ms” |
| RNF02 | Não-Funcional | Consumo de memória RAM inferior a 30MB. | “menos de 30MB de memória” |
—`
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como cliente da API, quero cadastrar produtos enviando JSON e receber 201 Created. |
Alta |
| US02 | Como integrador, quero consultar a lista completa em sub-milissegundos. | Alta |
—`
# Branch da funcionalidade
git checkout -b feature/US01-gin-rest-api
# Inicializar dependencias e rodar a API
go mod tidy && go run main.go
—`
main.go)package main
import (
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type Produto struct {
\ID uint `json:"id" gorm:"primaryKey"`
\Nome string `json:"nome" binding:"required"`
\Preco float64 `json:"preco" binding:"required,gt=0"`
}
func main() {
\db, _ := gorm.Open(sqlite.Open("produtos.db"), &gorm.Config{})
\db.AutoMigrate(&Produto{})
\r := gin.Default()
\r.GET("/api/v1/produtos", func(c *gin.Context) {
\var produtos []Produto
\db.Find(&produtos)
\c.JSON(http.StatusOK, produtos)
})
\r.Run(":8080")
}
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd backend_golang_01_gin_rest
go mod tidy
go run main.go
go test ./...
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/backend_golang_01_gin_rest`
—`
# Teste de requisicao com curl
curl -i -X POST http://localhost:8080/api/v1/produtos -H "Content-Type: application/json" -d '{"nome":"Teclado Mecanico","preco":350.00}'
—`
- API compilada e rodando com consumo de ~18MB de RAM.
- Validações de payload (
binding:"required") ativas.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |