Mini API RESTful para gestión de usuarios, desarrollada como prueba técnica.
Implementada en Golang, usando Gin para el servidor HTTP y MongoDB como base de datos.
- Crear usuario (POST)
- Listar todos los usuarios (GET)
- Consultar usuario por ID (GET)
- Actualizar usuario (PUT)
- Eliminar usuario (DELETE)
- Arquitectura en capas:
handler → service → repository
- Proyecto estructurado con Project Layout de Go
- Despliegue con Docker Compose
/handle-users-api ├── cmd/ │ └── main.go # Punto de entrada ├── internal/ │ ├── database/ # Conexión Mongo │ │ └── mongo.go │ ├── user/ # Dominio User │ │ ├── model.go │ │ ├── repository.go │ │ ├── service.go │ │ └── handler.go ├── go.mod ├── go.sum ├── README.md └── docker-compose.yml └── Dockerfile
La API utiliza MongoDB como almacén de datos.
Gracias a la integración con Docker Compose, la base de datos se levanta automáticamente junto con la API y no requiere scripts adicionales de creación.
- Nombre de la base de datos:
handle-users-db
- Colección principal:
users
- Conexión: definida en la variable de entorno
MONGO_URI
endocker-compose.yml
mongodb://mongo:27017/handle-users-db
- Go >= 1.20
- Docker >= 20.x
- Docker Compose (v1 o v2)
Verifica las instalaciones: go version docker --version docker compose version
-
Clonar el repo:
git clone https://github.com/animationware/handle-users-api.git cd handle-users-api
-
Realiza la instalación de dependencias necesarias y creación de archivo go.sum para realizar verificación checksum de dependencias: go mod tidy
-
Levantar MongoDB (local o en docker): docker compose up --build
- La API estará disponible en http://localhost:3000
- MongoDB estará disponible en mongodb://mongo:27017/handle-users-db
- Creación de Usuario: curl -X POST http://localhost:3000/users/ -H "Content-Type: application/json" -d '{"name":"Michael Romero","email":"michael@example.com"}'
- Obtener todos los Usuarios: curl http://localhost:3000/users/
- Actualizar usuario:
curl -X PUT http://localhost:3000/users/<ID-Usuario> -H "Content-Type: application/json" -d '{"name":"Nombre Actualizado","email":"mail.updated@example.com"}'
- Eliminar usuario:
curl -X DELETE http://localhost:3000/users/<ID-Usuario>
- Obtener usuario por ID:
curl http://localhost:3000/users/<ID-Usuario>
Se utilizó el patrón Repository-Service-Handler (arquitectura en capas):
- Handler: recibe y valida solicitudes HTTP.
- Service: contiene la lógica de negocio y reglas.
- Repository: maneja la persistencia en MongoDB.
Este patrón permite separación de responsabilidades, facilita pruebas unitarias y hace que la API sea mantenible y escalable.