{"id":30981017,"url":"https://github.com/gabriellglrs/api_em_golang","last_synced_at":"2026-05-09T05:34:07.812Z","repository":{"id":313542579,"uuid":"1051408561","full_name":"gabriellglrs/api_em_golang","owner":"gabriellglrs","description":"Uma API RESTful simples desenvolvida em Go para fins de aprendizado, demonstrando conceitos fundamentais de desenvolvimento backend com Clean Architecture.","archived":false,"fork":false,"pushed_at":"2025-09-06T18:09:39.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-06T20:26:14.975Z","etag":null,"topics":["apirestful","clean-architecture","docker","docker-compose","go"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabriellglrs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-06T00:06:13.000Z","updated_at":"2025-09-06T18:17:59.000Z","dependencies_parsed_at":"2025-09-06T20:26:33.685Z","dependency_job_id":"d26070c5-5bd9-44f6-a3d7-3bc43017bfb3","html_url":"https://github.com/gabriellglrs/api_em_golang","commit_stats":null,"previous_names":["gabriellglrs/api_em_golang"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gabriellglrs/api_em_golang","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabriellglrs%2Fapi_em_golang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabriellglrs%2Fapi_em_golang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabriellglrs%2Fapi_em_golang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabriellglrs%2Fapi_em_golang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabriellglrs","download_url":"https://codeload.github.com/gabriellglrs/api_em_golang/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabriellglrs%2Fapi_em_golang/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32808520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apirestful","clean-architecture","docker","docker-compose","go"],"created_at":"2025-09-12T08:07:07.090Z","updated_at":"2026-05-09T05:34:07.790Z","avatar_url":"https://github.com/gabriellglrs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API em Go 🚀\n\nUma API RESTful simples desenvolvida em Go para fins de aprendizado, demonstrando conceitos fundamentais de desenvolvimento backend com Clean Architecture.\n\n## 📚 Objetivos de Aprendizado\n\nEste projeto foi criado para ensinar e demonstrar:\n\n- **Clean Architecture** - Separação clara de responsabilidades\n- **Dependency Injection** - Desacoplamento entre camadas\n- **Repository Pattern** - Abstração da camada de dados\n- **REST API** - Desenvolvimento de endpoints HTTP\n- **PostgreSQL** - Integração com banco de dados relacional\n- **Docker** - Containerização de aplicações\n\n## 🏗️ Arquitetura do Projeto\n\n```\napi-em-go/\n├── cmd/api/              # Ponto de entrada da aplicação\n├── internal/\n│   ├── config/          # Configurações da aplicação\n│   ├── dto/             # Data Transfer Objects\n│   ├── handlers/        # Controllers/Handlers HTTP\n│   ├── models/          # Modelos de dados\n│   ├── repositories/    # Camada de acesso a dados\n│   ├── router/          # Configuração de rotas\n│   └── services/        # Lógica de negócios\n├── migrations/          # Scripts SQL de migração\n├── docker-compose.yml   # Configuração do PostgreSQL\n├── go.mod              # Gerenciamento de dependências\n└── go.sum\n```\n\n### 🧱 Camadas da Arquitetura\n\n1. **Handlers** (`internal/handlers/`): Recebem requisições HTTP e retornam respostas\n2. **Services** (`internal/services/`): Contêm a lógica de negócios\n3. **Repositories** (`internal/repositories/`): Fazem o acesso aos dados\n4. **Models** (`internal/models/`): Definem as estruturas de dados\n5. **DTOs** (`internal/dto/`): Objetos para transferência de dados\n\n## 🚀 Como Executar\n\n### Pré-requisitos\n\n- Go 1.25+ instalado\n- Docker e Docker Compose\n\n### 1. Clone o repositório\n\n```bash\ngit clone \u003cseu-repositorio\u003e\ncd api-em-go\n```\n\n### 2. Inicie o banco de dados\n\n```bash\ndocker-compose up -d\n```\n\n### 3. Instale as dependências\n\n```bash\ngo mod tidy\n```\n\n### 4. Execute a aplicação\n\n```bash\ngo run cmd/api/main.go\n```\n\nA API estará disponível em `http://localhost:8080`\n\n## 📖 Endpoints da API\n\n### Health Check\n```http\nGET /health\n```\n\n**Resposta:**\n```json\n{\n  \"status\": \"ok\"\n}\n```\n\n### Criar Usuário\n```http\nPOST /users\nContent-Type: application/json\n\n{\n  \"name\": \"João Silva\",\n  \"email\": \"joao@example.com\"\n}\n```\n\n**Resposta:**\n```json\n{\n  \"id\": 1,\n  \"name\": \"João Silva\",\n  \"email\": \"joao@example.com\"\n}\n```\n\n### Buscar Usuário por ID\n```http\nGET /users/{id}\n```\n\n**Resposta:**\n```json\n{\n  \"id\": 1,\n  \"name\": \"João Silva\",\n  \"email\": \"joao@example.com\"\n}\n```\n\n## 🧪 Testando a API\n\n### Usando cURL\n\n**Health Check:**\n```bash\ncurl http://localhost:8080/health\n```\n\n**Criar usuário:**\n```bash\ncurl -X POST http://localhost:8080/users \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"Maria Santos\", \"email\": \"maria@example.com\"}'\n```\n\n**Buscar usuário:**\n```bash\ncurl http://localhost:8080/users/1\n```\n\n## 🗄️ Banco de Dados\n\nO projeto utiliza PostgreSQL com as seguintes configurações:\n\n- **Host:** localhost:5432\n- **Usuário:** admin\n- **Senha:** admin\n- **Database:** api_db\n\n### Estrutura da Tabela Users\n\n```sql\nCREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(255) NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL\n);\n```\n\n## 🔧 Tecnologias Utilizadas\n\n- **[Go](https://golang.org/)** - Linguagem de programação\n- **[Gorilla Mux](https://github.com/gorilla/mux)** - Roteador HTTP\n- **[PostgreSQL](https://www.postgresql.org/)** - Banco de dados\n- **[lib/pq](https://github.com/lib/pq)** - Driver PostgreSQL para Go\n- **[Docker](https://www.docker.com/)** - Containerização\n\n## 🎯 Conceitos Demonstrados\n\n### 1. Clean Architecture\nA aplicação segue os princípios da Clean Architecture, mantendo as dependências apontando para dentro e separando claramente as responsabilidades.\n\n### 2. Dependency Injection\nAs dependências são injetadas através dos construtores, permitindo fácil substituição e testabilidade.\n\n### 3. Repository Pattern\nA interface `UserRepository` abstrai o acesso aos dados, permitindo diferentes implementações (PostgreSQL, MongoDB, etc.).\n\n### 4. DTOs (Data Transfer Objects)\nUtilizamos DTOs para controlar exatamente quais dados são enviados e recebidos pela API.\n\n## 🔄 Migrações\n\nO projeto inclui migrações automáticas que são executadas na inicialização:\n\n1. `001_create_users_table.sql` - Cria a tabela de usuários\n2. `002_populate_users_table.sql` - Insere dados de teste\n\n\u003e **Nota:** Em produção, seria recomendado usar uma ferramenta de migração mais robusta como [migrate](https://github.com/golang-migrate/migrate).\n\n## 📈 Próximos Passos\n\nPara expandir seus conhecimentos, considere implementar:\n\n- [ ] Validação de dados de entrada\n- [ ] Middleware de logging\n- [ ] Autenticação JWT\n- [ ] Testes unitários e de integração\n- [ ] Documentação Swagger/OpenAPI\n- [ ] Paginação para listagem de usuários\n- [ ] Soft delete\n- [ ] Cache com Redis\n- [ ] Containerização da aplicação Go\n\n## 🤝 Contribuindo\n\nEste é um projeto educacional! Sinta-se à vontade para:\n\n1. Fazer fork do projeto\n2. Criar uma branch para sua feature (`git checkout -b feature/AmazingFeature`)\n3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)\n4. Push para a branch (`git push origin feature/AmazingFeature`)\n5. Abrir um Pull Request\n\n## 📝 Licença\n\nEste projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.\n\n## 📚 Recursos Adicionais\n\n- [Documentação oficial do Go](https://golang.org/doc/)\n- [Clean Architecture em Go](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)\n- [REST API Design Best Practices](https://restfulapi.net/)\n- [PostgreSQL Tutorial](https://www.postgresql.org/docs/current/tutorial.html)\n\n---\n\n**Feito com ❤️ para aprendizado em Go**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabriellglrs%2Fapi_em_golang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabriellglrs%2Fapi_em_golang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabriellglrs%2Fapi_em_golang/lists"}