Descripción:
Esta es una API RESTful construida en Golang utilizando el framework Gin
. La API permite la autenticación y gestión de usuarios, conectándose a una base de datos MongoDB. La estructura sigue buenas prácticas de separación de responsabilidades y utiliza docker-compose
para facilitar el despliegue de MongoDB.
- Autenticación de usuario con JWT.
- Gestión de usuarios (registro y obtención).
- Conexión a MongoDB para almacenamiento de datos.
- Arquitectura limpia con separación de handlers, servicios y repositorios.
- Uso de
Gin
como framework HTTP con middlewares de recuperación y registro. - Configuración de base de datos en archivo dedicado.
- Golang
- Gin - Framework para el enrutamiento HTTP.
- MongoDB - Base de datos NoSQL.
- Docker y Docker Compose - Para ejecutar MongoDB en un contenedor.
- JWT - Para autenticación basada en tokens.
- Golang 1.23 o superior
- Docker y Docker Compose (para MongoDB)
-
Clonar el repositorio:
git clone https://github.com/cessadev/golang-api-gin.git cd golang-api-gin
-
Configurar Docker Compose para MongoDB:
Crea un archivo
docker-compose.yml
en la raíz del proyecto:version: "3.8" services: mongodb: image: mongo container_name: mongodb ports: - "27017:27017" environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example
-
Ejecutar MongoDB:
Inicia el contenedor de MongoDB:
docker-compose up --build
-
Configurar la conexión a la base de datos:
En
config/database.go
, se utiliza esta cadena de conexión para MongoDB:clientOptions := options.Client().ApplyURI("mongodb://root:example@localhost:27017")
-
Ejecutar la API:
go run cmd/api/main.go
Si la conexión es exitosa, deberías ver en la consola:
Conectado a MongoDB [GIN-debug] Listening and serving HTTP on :8080
-
Login
POST /auth/login
Body (JSON):
{ "email": "[email protected]", "password": "yourpassword" }
Respuesta:
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }
-
Crear usuario
POST /users
Body (JSON):
{ "name": "Jorge Mahp", "email": "[email protected]", "password": "yourpassword" }
Respuesta:
{ "id": "60c72b2f5f1b2c001c8e4c3e", "name": "Jorge Mahp", "email": "[email protected]" }
-
Obtener usuario por ID
GET /users/:id
Respuesta:
{ "id": "60c72b2f5f1b2c001c8e4c3e", "name": "Jorge Mahp", "email": "[email protected]" }
Para poner esta API en producción:
-
Cambia el modo de
debug
arelease
:gin.SetMode(gin.ReleaseMode)
-
Configura proxies de confianza si tu API está detrás de un balanceador de carga o proxy.
-
Variables de Entorno: Reemplaza credenciales sensibles y configuraciones de MongoDB con variables de entorno.
Este proyecto está bajo la licencia MIT. Puedes hacer uso del código para tus propios proyectos.