Uma API REST robusta e escalável desenvolvida em Golang, seguindo boas práticas de arquitetura limpa e design patterns modernos.
- Go 1.24+: Linguagem de programação principal
- Gin: Framework web para construção de APIs REST
- PostgreSQL: Banco de dados relacional
- Redis: Cache e gerenciamento de filas
- JWT: Autenticação baseada em tokens
- Docker & Docker Compose: Containerização e orquestração
- Golang Migrate: Gerenciamento de migrações de banco de dados
- AWS SDK v2: Integração com serviços AWS (SES, S3, SNS, SQS)
- Bcrypt: Hash de senhas seguro
- Air: Hot-reload para desenvolvimento
- Testcontainers: Testes de integração com containers
- Slack Integration: Sistema de alertas e notificações
- Go 1.24 ou superior
- Docker e Docker Compose
- Make (opcional, para facilitar o uso dos comandos)
-
Clone o repositório:
git clone https://github.com/vagnercardosoweb/go-rest-api.git cd go-rest-api
-
Configure as variáveis de ambiente:
# Crie o arquivo de ambiente baseado no de exemplo cp .env.example .env.development # Edite o arquivo conforme necessário
-
Instale as ferramentas de desenvolvimento (opcional):
make install_tools
make start_docker
make start_development
make run
# Criar nova migração
make create_migration name="nome_da_migracao"
# Executar todas as migrações
make migration_up
# Reverter a última migração
make migration_down
# Reverter todas as migrações
make migration_clean
# Executar todos os testes
make test
# Testes com detecção de race conditions
make test_race
# Testes com relatório de cobertura
make test_coverage
# Executar todas as verificações de qualidade
make quality
# Verificações individuais
make lint # Linting com golangci-lint
make security # Verificações de segurança (gosec + govulncheck)
make staticcheck # Análise estática
make format # Formatação de código
make generate_bin local
make generate_bin linux
# Build local
make docker_build dev local
# Build e push para AWS ECR
make docker_build prod aws
go-rest-api/
├── cmd/api/ # Ponto de entrada da aplicação
├── internal/ # Código específico da aplicação
│ ├── events/ # Sistema de eventos
│ ├── handlers/ # Handlers HTTP por domínio
│ │ └── user/
│ ├── repositories/ # Camada de acesso a dados
│ │ └── user/
│ ├── schedules/ # Tarefas agendadas
│ ├── services/ # Lógica de negócio
│ │ └── user/
│ └── types/ # Tipos e estruturas específicas
├── pkg/ # Pacotes reutilizáveis
│ ├── api/ # Framework REST customizado
│ │ ├── context/ # Contexto da API
│ │ ├── handlers/ # Handlers genéricos
│ │ ├── middlewares/ # Middlewares
│ │ ├── request/ # Utilitários de request
│ │ └── response/ # Utilitários de response
│ ├── aws/ # Clientes AWS (SES, S3, SNS, SQS)
│ ├── env/ # Gerenciamento de variáveis de ambiente
│ ├── errors/ # Sistema de tratamento de erros
│ ├── events/ # Sistema de eventos
│ ├── logger/ # Sistema de logging estruturado
│ ├── mailer/ # Sistema de envio de emails
│ ├── monitoring/ # Profiling e monitoramento
│ ├── password/ # Utilitários para hash de senhas
│ ├── postgres/ # Cliente PostgreSQL
│ ├── redis/ # Cliente Redis
│ ├── slack/ # Integração com Slack
│ ├── token/ # Implementação JWT
│ └── utils/ # Funções utilitárias
├── migrations/ # Migrações do banco de dados
├── resources/ # Recursos estáticos
│ ├── aws_ses_templates/ # Templates de email
│ └── kubernetes/ # Manifests Kubernetes
└── tests/ # Utilitários para testes
- 🔐 Autenticação JWT: Sistema completo de autenticação baseado em tokens
- 📧 Sistema de Email: Integração com AWS SES e templates
- 📊 Sistema de Eventos: Arquitetura orientada a eventos para desacoplamento
- ⏰ Tarefas Agendadas: Scheduler para execução de jobs em background
- 🔔 Alertas Slack: Notificações automáticas de eventos importantes
- 📝 Logging Estruturado: Sistema de logs com metadados e redação de dados sensíveis
- 🛡️ Tratamento de Erros: Sistema padronizado de tratamento e propagação de erros
- 📈 Monitoramento: Profiling e métricas de performance
- 🧪 Testes Integrados: Suporte completo a testes com containers
- 🐳 Containerização: Suporte completo ao Docker e Kubernetes
APP_ENV
: Ambiente da aplicação (development
,production
,test
)PORT
: Porta da aplicação (padrão:3000
)IS_LOCAL
: Execução local (padrão:false
)
JWT_SECRET_KEY
: Chave secreta para assinatura JWTJWT_EXPIRES_IN_SECONDS
: Tempo de expiração do token (padrão:86400
)
DB_HOST
: Host do PostgreSQLDB_PORT
: Porta do PostgreSQL (padrão:5432
)DB_NAME
: Nome do banco de dadosDB_USERNAME
: Usuário do bancoDB_PASSWORD
: Senha do bancoDB_ENABLED_SSL
: Habilitar SSL (padrão:false
)DB_AUTO_MIGRATE
: Executar migrações automaticamente (padrão:false
)
REDIS_HOST
: Host do RedisREDIS_PORT
: Porta do Redis (padrão:6379
)REDIS_PASSWORD
: Senha do RedisREDIS_DATABASE
: Database do Redis (padrão:0
)
AWS_REGION
: Região AWS (padrão:us-east-1
)AWS_ACCESS_KEY_ID
: Chave de acesso AWSAWS_SECRET_ACCESS_KEY
: Chave secreta AWSAWS_SES_SOURCE
: Email remetente para SES
SLACK_ENABLED
: Habilitar integração Slack (padrão:true
)SLACK_TOKEN
: Token do bot SlackSLACK_CHANNEL
: Canal para alertas (padrão:alerts
)SLACK_USERNAME
: Nome do usuário bot (padrão:go-rest-api
)
SCHEDULER_ENABLED
: Habilitar scheduler (padrão:false
)SCHEDULER_SLEEP
: Intervalo do scheduler em segundos (padrão:60
)LOGGER_ENABLED
: Habilitar logging (padrão:true
)PROFILER_ENABLED
: Habilitar profiler (padrão:false
)
# Executar pipeline completo
make ci
O pipeline inclui:
- Verificação de build e dependências
- Formatação de código
- Linting
- Análise estática
- Verificações de segurança
- Testes com cobertura
Execute make help
para ver todos os comandos disponíveis organizados por categoria:
- 🏗️ Build & Run:
run
,check_build
,generate_bin
- 🐳 Docker:
start_docker
,docker_build
- 🧪 Testing:
test
,test_race
,test_coverage
- 🔍 Quality & Security:
lint
,security
,staticcheck
,format
,quality
- 📦 Installation:
install_tools
,lint_install
,security_install
- 🚀 CI/CD:
ci
- 🗄️ Database:
create_migration
,migration_up
,migration_down
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feat/AmazingFeature
) - Execute os testes e verificações de qualidade (
make ci
) - Commit suas mudanças (
git commit -m 'feat: add some AmazingFeature'
) - Push para a branch (
git push origin feat/AmazingFeature
) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido por Vagner Cardoso
⭐ Se este projeto foi útil para você, considere dar uma estrela no repositório!