📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Backend com Golang e Gin. Recomendado revisar antes de começar.

🐹 API RESTful Corporativa com Go & Gin Framework

v1.0 — Concorrência, Handlers HTTP, GORM e Arquitetura de Microsserviços em Go

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 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.

—`

🎯 Objetivo & Escopo do Projeto

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.

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Tech Lead de Microsserviços)

“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.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

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”

—`

📋 Fase 2 — Backlog & User Stories

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

—`

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-gin-rest-api

# Inicializar dependencias e rodar a API
go mod tidy && go run main.go

—`

🛠️ Fase 4 — Implementação Guiada (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")
}

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd backend_golang_01_gin_rest

2. Execute a aplicação e os testes

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`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Benchmark

# 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}'

—`

✅ Checkpoint Final

  1. API compilada e rodando com consumo de ~18MB de RAM.
  2. Validações de payload (binding:"required") ativas.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal