Uma API REST simples desenvolvida em Go que demonstra boas práticas de arquitetura em camadas, incluindo handlers, casos de uso (use cases), repositórios e modelos de dados.
Este é um projeto educacional que implementa uma API REST para gerenciar usuários, seguindo a arquitetura em camadas (Layered Architecture). O projeto inclui tanto o servidor da API quanto um cliente de exemplo para testar os endpoints.
- Handlers: Responsáveis por processar requisições HTTP e retornar respostas
- Use Cases: Contêm a lógica de negócio da aplicação
- Repositories: Realizam operações de persistência de dados
- Models: Definem as estruturas de dados utilizadas na API
golang-rest-api/
├── cmd/
│ ├── api/
│ │ └── main.go # Entrada da API
│ ├── client/
│ │ └── main.go # Cliente de exemplo
│ └── internal/
│ ├── handlers/ # Handlers HTTP
│ │ ├── handlers.go
│ │ └── users.go
│ ├── models/ # Estruturas de dados
│ │ ├── errors.go
│ │ └── users.go
│ ├── repositoires/ # Acesso a dados
│ │ ├── repositories.go
│ │ └── Users/
│ │ └── users.go
│ └── usecases/ # Lógica de negócio
│ └── usecases.go
├── go.mod # Dependências
└── README.md # Este arquivo
- Go 1.26.2 ou superior
- Git (opcional)
go mod download- Abra um terminal na raiz do projeto
- Execute:
go run ./cmd/api/main.goA API iniciará na porta 8080 e exibirá uma mensagem como:
2024/04/29 10:30:45 INFO Starting server port=8080
Em outro terminal, na raiz do projeto, execute:
go run ./cmd/client/main.goO cliente fará uma requisição POST para criar um novo usuário. Se bem-sucedido, você verá uma resposta como:
new user created {<uuid-do-usuario>}
Requisição:
POST /users HTTP/1.1
Host: localhost:8080
Content-Type: application/json
{
"username": "John Doe",
"email": "john.doe@example.com",
"password": "senhaSegura123"
}Resposta (201 Created):
{
"new_user_id": "550e8400-e29b-41d4-a716-446655440000"
}Requisição:
GET /users HTTP/1.1
Host: localhost:8080Resposta (200 OK):
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"username": "John Doe",
"email": "john.doe@example.com",
"password": "senhaSegura123"
}
]Criar um novo usuário:
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{
"username": "Jane Smith",
"email": "jane.smith@example.com",
"password": "outraSenha456"
}'Listar todos os usuários:
curl http://localhost:8080/usersgithub.com/google/uuid: Biblioteca para geração de UUIDs (para IDs únicos dos usuários)
Este projeto demonstra:
- ✅ Arquitetura em camadas em Go
- ✅ Patterns de dependência e injeção de dependências
- ✅ Tratamento de erros em Go
- ✅ Estrutura de um servidor HTTP
- ✅ Como organizar código Go em projetos maiores
- ✅ Uso de structs e métodos
- ✅ Boas práticas de nomeação e organização
- Os dados são armazenados em memória, portanto serão perdidos quando a API for encerrada
- Este é um projeto de aprendizado e não deve ser usado em produção sem melhorias significativas
- A estrutura
cmd/internalsegue as convenções padrão da comunidade Go
Este projeto é fornecido como está para fins educacionais.
Desenvolvido com ❤️ em Go