Una API REST para gestión de héroes construida con Express.js siguiendo las mejores prácticas.
- Express.js - Framework web rápido y minimalista
- Validación de datos - Usando express-validator
- Middleware de seguridad - Helmet para cabeceras de seguridad
- CORS - Configurado para permitir solicitudes cross-origin
- Logging - Morgan para logs de peticiones HTTP
- Compresión - Gzip para optimizar respuestas
- Manejo de errores - Middleware centralizado para errores
- Estructura modular - Separación clara de responsabilidades
src/
├── controllers/ # Controladores de rutas
├── data/ # Datos mock
├── middleware/ # Middleware personalizado
├── routes/ # Definición de rutas
├── services/ # Lógica de negocio
└── index.js # Punto de entrada
- Instalar dependencias:
npm install- Copiar archivo de configuración:
cp .env.example .env- Iniciar en modo desarrollo:
npm run dev| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/heroes |
Obtener todos los héroes |
| GET | /api/heroes/:id |
Obtener héroe por ID |
| POST | /api/heroes |
Crear nuevo héroe |
| PUT | /api/heroes/:id |
Actualizar héroe |
| DELETE | /api/heroes/:id |
Eliminar héroe |
page(number): Número de página (default: 1)limit(number): Elementos por página (default: 10)search(string): Buscar por nombre o poderuniverse(string): Filtrar por universo
curl http://localhost:3000/api/heroescurl "http://localhost:3000/api/heroes?page=1&limit=5&universe=Marvel"curl -X POST http://localhost:3000/api/heroes \
-H "Content-Type: application/json" \
-d '{
"name": "Nuevo Héroe",
"power": "Súper poder increíble",
"universe": "Marvel",
"isActive": true
}'curl -X PUT http://localhost:3000/api/heroes/1 \
-H "Content-Type: application/json" \
-d '{
"name": "Spider-Man Actualizado",
"power": "Poderes arácnidos mejorados"
}'curl -X DELETE http://localhost:3000/api/heroes/1Ejecutar tests:
npm testEjecutar tests en modo watch:
npm run test:watchnpm start: Inicia el servidor en producciónnpm run dev: Inicia el servidor en modo desarrollo con nodemonnpm test: Ejecuta los testsnpm run test:watch: Ejecuta tests en modo watch
- Helmet: Configura cabeceras HTTP de seguridad
- CORS: Configurado para permitir orígenes específicos
- Validación: Validación exhaustiva de entrada de datos
- Rate limiting: Preparado para implementar en producción
docker build -t heroes-api .docker run -p 3000:3000 --env-file .env heroes-api# docker-compose.yml
version: '3.8'
services:
heroes-api:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- PORT=3000
restart: unless-stoppeddocker-compose up -dPara deployer en producción:
- Configurar variables de entorno apropiadas
- Usar un process manager como PM2 o Docker
- Configurar un reverse proxy (Nginx)
- Implementar rate limiting
- Configurar logs persistentes
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request