API REST para interactuar con Google Gemini AI con contexto persistente opcional usando MongoDB, seguridad mejorada y documentación completa.
- Contexto Persistente Opcional: Mantiene hasta 100 mensajes por sesión usando MongoDB (se puede deshabilitar)
- Seguridad Mejorada: Implementa helmet, CORS, rate limiting y validación de entrada
- Documentación Interactiva: Swagger UI integrado
- Chat Conversacional: Endpoint optimizado para conversaciones naturales
- Validación Robusta: Validación de entrada con
express-validator - Manejo de Errores: Sistema robusto de manejo de errores
- Rate Limiting: Límites configurables para prevenir abuso
- Proxy Ready: Configurado para funcionar detrás de proxies
- Sesiones Opcionales: Funciona con o sin persistencia de contexto
- Node.js 16+
- API Key de Google Gemini AI
- MongoDB (opcional, solo si se habilitan las sesiones)
- NPM o Yarn
-
Clonar el repositorio
git clone <tu-repositorio> cd gemini-rest-api
-
Instalar dependencias
npm install
-
Configurar variables de entorno
cp .env.example .env
Edita el archivo
.envcon tus configuraciones:GEMINIKEY=tu_api_key_de_gemini PORT=3000 NODE_ENV=production # ... otras configuraciones
-
Inicializar y arrancar
npm start
npm start- Inicializa y arranca el servidor en producciónnpm run dev- Inicializa y arranca en modo desarrollo con nodemonnpm run init- Solo ejecuta la inicialización
GET /- Información general de la APIGET /health- Health check del servicioGET /api-docs- Documentación Swagger interactiva
GET /api/ai?prompt=<mensaje>&sessionId=<id>&useContext=<boolean>- Generar respuestaPOST /api/ai- Generar respuesta (método POST)
POST /api/chat- Chat optimizado con historial completo
GET /api/context- Listar todas las sesionesGET /api/context/:sessionId- Obtener contexto de una sesiónGET /api/context/:sessionId/stats- Estadísticas de una sesiónDELETE /api/context/:sessionId- Limpiar contexto de una sesión
GET /api?prompt=<mensaje>- Endpoint legacy (deprecado)
curl -X POST http://localhost:3000/api/chat \\
-H "Content-Type: application/json" \\
-d '{
"message": "Hola, ¿cómo estás?",
"sessionId": "mi_sesion_123"
}'curl -X POST http://localhost:3000/api/ai \\
-H "Content-Type: application/json" \\
-d '{
"prompt": "Continúa la conversación anterior",
"sessionId": "mi_sesion_123",
"useContext": true
}'curl http://localhost:3000/api/context/mi_sesion_123/stats- General: 100 requests por 15 minutos
- IA: 10 requests por minuto
- Contexto: 5 operaciones por minuto
- Helmet activado con CSP configurado
- CORS configurable
- Compresión habilitada
- Validación de entrada en todos los endpoints
- Sanitización de datos
- Límites de longitud de mensajes
La API está configurada para funcionar detrás de proxies:
TRUST_PROXY=true
PROXY_COUNT=1curl http://localhost:3000/healthLos logs incluyen:
- Requests HTTP (Morgan)
- Errores del sistema
- Información de inicialización
| Variable | Requerida | Descripción | Valor por defecto |
|---|---|---|---|
GEMINIKEY |
✅ | API Key de Google Gemini | - |
PORT |
❌ | Puerto del servidor | 3000 |
NODE_ENV |
❌ | Entorno de ejecución | development |
RATE_LIMIT_WINDOW_MS |
❌ | Ventana de rate limiting (ms) | 900000 |
RATE_LIMIT_MAX_REQUESTS |
❌ | Máximo requests por ventana | 100 |
MAX_CONTEXT_MESSAGES |
❌ | Máximo mensajes en contexto | 100 |
TRUST_PROXY |
❌ | Confiar en proxy | false |
CORS_ORIGIN |
❌ | Orígenes CORS permitidos | * |
gemini-rest-api/
├── src/
│ ├── config/
│ │ ├── config.js
│ │ └── swagger.js
│ ├── middleware/
│ │ ├── errorHandler.js
│ │ ├── rateLimiter.js
│ │ └── validators.js
│ ├── routes/
│ │ ├── index.js
│ │ ├── ai.js
│ │ ├── chat.js
│ │ └── context.js
│ ├── services/
│ │ ├── contextService.js
│ │ └── geminiService.js
│ ├── scripts/
│ │ └── init.js
│ └── utils/
│ └── helpers.js
├── data/
│ └── context.json
├── index.js
├── package.json
├── .env.example
└── README.md
El proyecto incluye vercel.json configurado. Solo necesitas:
- Configurar las variables de entorno en Vercel
- Deploy usando
vercel --prod
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]pm2 start index.js --name "gemini-api"- Verificar configuración:
npm run init - Logs detallados: Establecer
NODE_ENV=development - Health check: Visitar
/health - Documentación: Visitar
/api-docs
ISC
DANK1775
- GitHub: @DANK1775
- Discord: dank.js
manalejandro
- GitHub: @manalejandro
- Fork el proyecto
- Crea tu feature branch (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Abre un Pull Request
- ✅ Contexto persistente con json-store
- ✅ Seguridad mejorada con helmet y rate limiting
- ✅ Validación robusta con express-validator
- ✅ Documentación Swagger completa
- ✅ Chat conversacional optimizado
- ✅ Gestión avanzada de errores
- ✅ Configuración para proxies
- ✅ Scripts de inicialización
- ✅ Endpoints de monitoreo