Uma API REST robusta e escalável desenvolvida em Golang, seguindo boas práticas de arquitetura e design de software.
- Go 1.22+: Linguagem de programação principal
- Gin: Framework web para construção de APIs REST
- PostgreSQL: Banco de dados relacional
- Redis: Armazenamento em 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: Integração com serviços da AWS (SES, etc.)
- Bcrypt: Hash de senhas seguro
- Air: Hot-reload para desenvolvimento
- Testcontainers: Testes de integração com containers
- Go 1.22 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
-
Copie o arquivo de exemplo de variáveis de ambiente:
cp .env.example .env.local
-
Ajuste as variáveis de ambiente conforme necessário no arquivo
.env.local
make start_docker
Este comando irá iniciar todos os serviços necessários (API, PostgreSQL e Redis) em containers Docker.
make start_local
Este comando utiliza o Air para fornecer hot-reload durante o desenvolvimento.
make start_production # Para ambiente de produção
make start_staging # Para ambiente de staging
Criar uma nova migração:
make create_migration name="nome_da_migracao"
Executar migrações:
make migration_up
Reverter todas as migrações:
make migration_down
Executar todos os testes:
make test
Executar testes com detecção de race conditions:
make test_race
make generate_local_bin
make generate_linux_bin
make docker_build_local
make docker_build_aws
- cmd/api: Ponto de entrada da aplicação
- internal: Código específico da aplicação
- events: Sistema de eventos da aplicação
- handlers: Manipuladores HTTP
- repositories: Camada de acesso a dados
- schedules: Tarefas agendadas
- services: Lógica de negócio
- types: Definições de tipos e estruturas
- migrations: Arquivos de migração do banco de dados
- pkg: Pacotes reutilizáveis
- api: Configuração e utilitários da API REST
- aws: Integrações com serviços AWS
- env: Gerenciamento de variáveis de ambiente
- errors: Tratamento padronizado de erros
- logger: Sistema de logging
- password_hash: Utilitários para hash de senhas
- postgres: Cliente e utilitários para PostgreSQL
- redis: Cliente e utilitários para Redis
- token: Implementação de JWT
- utils: Funções utilitárias diversas
- resources: Recursos estáticos
- tests: Testes de integração e utilitários para testes
- Autenticação via JWT
- Sistema de eventos para desacoplamento de operações
- Tarefas agendadas
- Integração com AWS (SES, etc.)
- Logging estruturado
- Tratamento padronizado de erros
- Monitoramento e profiling
O arquivo .env.example
contém todas as variáveis de ambiente necessárias para executar a aplicação. Algumas das principais são:
PORT
: Porta em que a API será executadaAPP_ENV
: Ambiente da aplicação (local, production, staging, test)JWT_SECRET_KEY
: Chave secreta para assinatura de tokens JWTDB_*
: Configurações do PostgreSQLREDIS_*
: Configurações do RedisAWS_*
: Configurações da AWS
Este projeto está sob a licença MIT.
Desenvolvido por Vagner Cardoso.