Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Golang REST API

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.

📋 Sobre o Projeto

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.

Estrutura de Camadas

  • 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

🏗️ Estrutura do Projeto

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

🚀 Como Usar

Pré-requisitos

  • Go 1.26.2 ou superior
  • Git (opcional)

Instalação de Dependências

go mod download

Rodando a API

  1. Abra um terminal na raiz do projeto
  2. Execute:
go run ./cmd/api/main.go

A API iniciará na porta 8080 e exibirá uma mensagem como:

2024/04/29 10:30:45 INFO Starting server port=8080

Rodando o Cliente de Teste

Em outro terminal, na raiz do projeto, execute:

go run ./cmd/client/main.go

O 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>}

🔌 Endpoints da API

Criar Usuário

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"
}

Listar Todos os Usuários

Requisição:

GET /users HTTP/1.1
Host: localhost:8080

Resposta (200 OK):

[
  {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "username": "John Doe",
    "email": "john.doe@example.com",
    "password": "senhaSegura123"
  }
]

🛠️ Exemplo de Uso com curl

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/users

📦 Dependências

  • github.com/google/uuid: Biblioteca para geração de UUIDs (para IDs únicos dos usuários)

🎓 O que Você Aprenderá

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

📝 Notas

  • 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/internal segue as convenções padrão da comunidade Go

📄 Licença

Este projeto é fornecido como está para fins educacionais.


Desenvolvido com ❤️ em Go

About

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.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages