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
Gincomo 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.ymlen 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/loginBody (JSON):
{ "email": "example@example.com", "password": "yourpassword" }Respuesta:
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }
-
Crear usuario
POST /usersBody (JSON):
{ "name": "Jorge Mahp", "email": "jmahp12345@example.com", "password": "yourpassword" }Respuesta:
{ "id": "60c72b2f5f1b2c001c8e4c3e", "name": "Jorge Mahp", "email": "jmahp12345@example.com" } -
Obtener usuario por ID
GET /users/:idRespuesta:
{ "id": "60c72b2f5f1b2c001c8e4c3e", "name": "Jorge Mahp", "email": "jmahp12345@example.com" }
Para poner esta API en producción:
-
Cambia el modo de
debugarelease: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.