📚 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

📁 Código deste projeto: api-gin/ (os caminhos citados abaixo são relativos à subpasta).

Diagrama de arquitetura do projeto

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. Navegue até a subpasta do projeto

cd catalogo_projetos/backend_golang_01_gin_rest/api-gin

2. Execute via Go Toolchain

go run main.go

🧭 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 Catálogo de Projetos 🏠 Página Inicial do Portal