https://github.com/vagnercardosoweb/go-rest-api
Create Rest API with GoLang
https://github.com/vagnercardosoweb/go-rest-api
backend gin-gonic golang http-server postgresql redis rest-api
Last synced: 2 months ago
JSON representation
Create Rest API with GoLang
- Host: GitHub
- URL: https://github.com/vagnercardosoweb/go-rest-api
- Owner: vagnercardosoweb
- Created: 2023-01-25T03:36:49.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-05-29T04:19:31.000Z (about 1 year ago)
- Last Synced: 2025-05-29T05:25:49.899Z (about 1 year ago)
- Topics: backend, gin-gonic, golang, http-server, postgresql, redis, rest-api
- Language: Go
- Homepage:
- Size: 388 KB
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# Go REST API
Uma API REST robusta e escalável desenvolvida em Golang, seguindo boas práticas de arquitetura limpa e design patterns modernos.
## 🚀 Tecnologias Utilizadas
- **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
## 📋 Pré-requisitos
- Go 1.24 ou superior
- Docker e Docker Compose
- Make (opcional, para facilitar o uso dos comandos)
## ⚙️ Configuração do Ambiente
1. **Clone o repositório:**
```bash
git clone https://github.com/vagnercardosoweb/go-rest-api.git
cd go-rest-api
```
2. **Configure as variáveis de ambiente:**
```bash
# Crie o arquivo de ambiente baseado no de exemplo
cp .env.example .env.development
# Edite o arquivo conforme necessário
```
3. **Instale as ferramentas de desenvolvimento (opcional):**
```bash
make install_tools
```
## 🏃♂️ Executando o Projeto
### Usando Docker (Recomendado) com Hot-Reload
```bash
make start_docker
```
### Desenvolvimento Local com Hot-Reload
```bash
make start_development
```
### Execução Direta
```bash
make run
```
## 🗄️ Gerenciamento do Banco de Dados
### Migrações
```bash
# 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
```
## 🧪 Testes
```bash
# 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
```
## 🔍 Qualidade de Código
```bash
# 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
```
## 🏗️ Build e Deploy
### Build Local
```bash
make generate_bin local
```
### Build para Linux (Produção)
```bash
make generate_bin linux
```
### Build Docker
```bash
# Build local
make docker_build dev local
# Build e push para AWS ECR
make docker_build prod aws
```
## 📁 Arquitetura do Projeto
```
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
```
## ✨ Funcionalidades Principais
- **🔐 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
## 🌍 Variáveis de Ambiente
### Aplicação
- `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`)
### Autenticação
- `JWT_SECRET_KEY`: Chave secreta para assinatura JWT
- `JWT_EXPIRES_IN_SECONDS`: Tempo de expiração do token (padrão: `86400`)
### Banco de Dados
- `DB_HOST`: Host do PostgreSQL
- `DB_PORT`: Porta do PostgreSQL (padrão: `5432`)
- `DB_NAME`: Nome do banco de dados
- `DB_USERNAME`: Usuário do banco
- `DB_PASSWORD`: Senha do banco
- `DB_ENABLED_SSL`: Habilitar SSL (padrão: `false`)
- `DB_AUTO_MIGRATE`: Executar migrações automaticamente (padrão: `false`)
### Redis
- `REDIS_HOST`: Host do Redis
- `REDIS_PORT`: Porta do Redis (padrão: `6379`)
- `REDIS_PASSWORD`: Senha do Redis
- `REDIS_DATABASE`: Database do Redis (padrão: `0`)
### AWS
- `AWS_REGION`: Região AWS (padrão: `us-east-1`)
- `AWS_ACCESS_KEY_ID`: Chave de acesso AWS
- `AWS_SECRET_ACCESS_KEY`: Chave secreta AWS
- `AWS_SES_SOURCE`: Email remetente para SES
### Slack
- `SLACK_ENABLED`: Habilitar integração Slack (padrão: `true`)
- `SLACK_TOKEN`: Token do bot Slack
- `SLACK_CHANNEL`: Canal para alertas (padrão: `alerts`)
- `SLACK_USERNAME`: Nome do usuário bot (padrão: `go-rest-api`)
### Sistema
- `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`)
## 🚀 Pipeline CI/CD
```bash
# Executar pipeline completo
make ci
```
O pipeline inclui:
1. Verificação de build e dependências
2. Formatação de código
3. Linting
4. Análise estática
5. Verificações de segurança
6. Testes com cobertura
## 📚 Comandos Disponíveis
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`
## 🤝 Contribuindo
1. Faça um fork do projeto
2. Crie uma branch para sua feature (`git checkout -b feat/AmazingFeature`)
3. Execute os testes e verificações de qualidade (`make ci`)
4. Commit suas mudanças (`git commit -m 'feat: add some AmazingFeature'`)
5. Push para a branch (`git push origin feat/AmazingFeature`)
6. Abra um Pull Request
## 📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.
## 👨💻 Autor
Desenvolvido por [Vagner Cardoso](https://github.com/vagnercardosoweb)
---
⭐ Se este projeto foi útil para você, considere dar uma estrela no repositório!