https://github.com/gabriellglrs/api_em_golang
Uma API RESTful simples desenvolvida em Go para fins de aprendizado, demonstrando conceitos fundamentais de desenvolvimento backend com Clean Architecture.
https://github.com/gabriellglrs/api_em_golang
apirestful clean-architecture docker docker-compose go
Last synced: about 2 months ago
JSON representation
Uma API RESTful simples desenvolvida em Go para fins de aprendizado, demonstrando conceitos fundamentais de desenvolvimento backend com Clean Architecture.
- Host: GitHub
- URL: https://github.com/gabriellglrs/api_em_golang
- Owner: gabriellglrs
- Created: 2025-09-06T00:06:13.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-09-06T18:09:39.000Z (10 months ago)
- Last Synced: 2025-09-06T20:26:14.975Z (10 months ago)
- Topics: apirestful, clean-architecture, docker, docker-compose, go
- Language: Go
- Homepage:
- Size: 8.79 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# API em Go š
Uma API RESTful simples desenvolvida em Go para fins de aprendizado, demonstrando conceitos fundamentais de desenvolvimento backend com Clean Architecture.
## š Objetivos de Aprendizado
Este projeto foi criado para ensinar e demonstrar:
- **Clean Architecture** - Separação clara de responsabilidades
- **Dependency Injection** - Desacoplamento entre camadas
- **Repository Pattern** - Abstração da camada de dados
- **REST API** - Desenvolvimento de endpoints HTTP
- **PostgreSQL** - Integração com banco de dados relacional
- **Docker** - Containerização de aplicações
## šļø Arquitetura do Projeto
```
api-em-go/
āāā cmd/api/ # Ponto de entrada da aplicação
āāā internal/
ā āāā config/ # ConfiguraƧƵes da aplicação
ā āāā dto/ # Data Transfer Objects
ā āāā handlers/ # Controllers/Handlers HTTP
ā āāā models/ # Modelos de dados
ā āāā repositories/ # Camada de acesso a dados
ā āāā router/ # Configuração de rotas
ā āāā services/ # Lógica de negócios
āāā migrations/ # Scripts SQL de migração
āāā docker-compose.yml # Configuração do PostgreSQL
āāā go.mod # Gerenciamento de dependĆŖncias
āāā go.sum
```
### š§± Camadas da Arquitetura
1. **Handlers** (`internal/handlers/`): Recebem requisiƧƵes HTTP e retornam respostas
2. **Services** (`internal/services/`): Contêm a lógica de negócios
3. **Repositories** (`internal/repositories/`): Fazem o acesso aos dados
4. **Models** (`internal/models/`): Definem as estruturas de dados
5. **DTOs** (`internal/dto/`): Objetos para transferĆŖncia de dados
## š Como Executar
### PrƩ-requisitos
- Go 1.25+ instalado
- Docker e Docker Compose
### 1. Clone o repositório
```bash
git clone
cd api-em-go
```
### 2. Inicie o banco de dados
```bash
docker-compose up -d
```
### 3. Instale as dependĆŖncias
```bash
go mod tidy
```
### 4. Execute a aplicação
```bash
go run cmd/api/main.go
```
A API estarĆ” disponĆvel em `http://localhost:8080`
## š Endpoints da API
### Health Check
```http
GET /health
```
**Resposta:**
```json
{
"status": "ok"
}
```
### Criar UsuƔrio
```http
POST /users
Content-Type: application/json
{
"name": "João Silva",
"email": "joao@example.com"
}
```
**Resposta:**
```json
{
"id": 1,
"name": "João Silva",
"email": "joao@example.com"
}
```
### Buscar UsuƔrio por ID
```http
GET /users/{id}
```
**Resposta:**
```json
{
"id": 1,
"name": "João Silva",
"email": "joao@example.com"
}
```
## š§Ŗ Testando a API
### Usando cURL
**Health Check:**
```bash
curl http://localhost:8080/health
```
**Criar usuƔrio:**
```bash
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{"name": "Maria Santos", "email": "maria@example.com"}'
```
**Buscar usuƔrio:**
```bash
curl http://localhost:8080/users/1
```
## šļø Banco de Dados
O projeto utiliza PostgreSQL com as seguintes configuraƧƵes:
- **Host:** localhost:5432
- **UsuƔrio:** admin
- **Senha:** admin
- **Database:** api_db
### Estrutura da Tabela Users
```sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL
);
```
## š§ Tecnologias Utilizadas
- **[Go](https://golang.org/)** - Linguagem de programação
- **[Gorilla Mux](https://github.com/gorilla/mux)** - Roteador HTTP
- **[PostgreSQL](https://www.postgresql.org/)** - Banco de dados
- **[lib/pq](https://github.com/lib/pq)** - Driver PostgreSQL para Go
- **[Docker](https://www.docker.com/)** - Containerização
## šÆ Conceitos Demonstrados
### 1. Clean Architecture
A aplicação segue os princĆpios da Clean Architecture, mantendo as dependĆŖncias apontando para dentro e separando claramente as responsabilidades.
### 2. Dependency Injection
As dependências são injetadas através dos construtores, permitindo fÔcil substituição e testabilidade.
### 3. Repository Pattern
A interface `UserRepository` abstrai o acesso aos dados, permitindo diferentes implementaƧƵes (PostgreSQL, MongoDB, etc.).
### 4. DTOs (Data Transfer Objects)
Utilizamos DTOs para controlar exatamente quais dados são enviados e recebidos pela API.
## š MigraƧƵes
O projeto inclui migrações automÔticas que são executadas na inicialização:
1. `001_create_users_table.sql` - Cria a tabela de usuƔrios
2. `002_populate_users_table.sql` - Insere dados de teste
> **Nota:** Em produção, seria recomendado usar uma ferramenta de migração mais robusta como [migrate](https://github.com/golang-migrate/migrate).
## š Próximos Passos
Para expandir seus conhecimentos, considere implementar:
- [ ] Validação de dados de entrada
- [ ] Middleware de logging
- [ ] Autenticação JWT
- [ ] Testes unitÔrios e de integração
- [ ] Documentação Swagger/OpenAPI
- [ ] Paginação para listagem de usuÔrios
- [ ] Soft delete
- [ ] Cache com Redis
- [ ] Containerização da aplicação Go
## š¤ Contribuindo
Este Ć© um projeto educacional! Sinta-se Ć vontade para:
1. Fazer fork do projeto
2. Criar uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. Commit suas mudanƧas (`git commit -m 'Add some AmazingFeature'`)
4. Push para a branch (`git push origin feature/AmazingFeature`)
5. Abrir um Pull Request
## š LicenƧa
Este projeto estƔ sob a licenƧa MIT. Veja o arquivo `LICENSE` para mais detalhes.
## š Recursos Adicionais
- [Documentação oficial do Go](https://golang.org/doc/)
- [Clean Architecture em Go](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
- [REST API Design Best Practices](https://restfulapi.net/)
- [PostgreSQL Tutorial](https://www.postgresql.org/docs/current/tutorial.html)
---
**Feito com ā¤ļø para aprendizado em Go**