API RESTful completa desarrollada con Node.js y Express para la gestión de productos de e-commerce. Este proyecto implementa un sistema backend con autenticación JWT, integración con Firebase Firestore y una arquitectura escalable en capas.
Este es el proyecto final de Backend desarrollado para TechLab, cuyo objetivo es proporcionar una API RESTful segura y escalable para la administración completa del catálogo de productos de una tienda en línea. La aplicación permite realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) sobre los productos, con una capa de autenticación que protege el acceso a los datos almacenados en Firebase Firestore.
La aplicación está desplegada en Vercel: https://node-ecommerce-api-zeta.vercel.app/
- API RESTful con arquitectura en capas (rutas, controladores, servicios, modelos)
- Autenticación y autorización mediante JWT (JSON Web Tokens)
- Base de datos en la nube con Firebase Firestore
- Gestión completa de productos (CRUD)
- Manejo de errores (404, 401, 403, 400, 500)
- Soporte para CORS (peticiones de origen cruzado)
- Código modular y escalable siguiendo mejores prácticas
- Node.js: Entorno de ejecución de JavaScript
- Express: Framework web para Node.js
- Firebase Firestore: Base de datos NoSQL en la nube
- JWT (jsonwebtoken): Autenticación basada en tokens
- CORS: Middleware para habilitar peticiones de origen cruzado
- body-parser: Middleware para parsear el body de las peticiones
- dotenv: Gestión de variables de entorno
El proyecto sigue una arquitectura en capas que separa responsabilidades:
node-ecommerce-api
├── .postman
│ └── config.json
├── postman
│ ├── collections
│ │ └── TechLab Products API.postman_collection.json
│ └── globals
│ └── workspace.postman_globals.json
├── src
│ ├── config
│ │ ├── firebase.js
│ │ └── jwt.js
│ ├── controllers
│ │ ├── auth.controller.js
│ │ └── products.controller.js
│ ├── middleware
│ │ ├── auth.middleware.js
│ │ ├── errorHandler.js
│ │ └── errors.middleware.js
│ ├── models
│ │ └── product.model.js
│ ├── routes
│ │ ├── auth.routes.js
│ │ └── products.routes.js
│ ├── services
│ │ ├── auth.service.js
│ │ └── products.service.js
│ └── utils
│ └── errors.js
├── .gitignore
├── index.js
├── package-lock.json
├── package.json
├── TechLab Products API.postman_test_run.json
└── vercel.json
Antes de usar los endpoints protegidos, necesitas autenticarte y obtener un token JWT.
Login
POST /auth/login
Content-Type: application/json
{
"email": "admin@example.com",
"password": "tu_password"
}Respuesta exitosa:
{
"message": "Login successful",
"token": "token",
"expiresIn": "3600",
"user": {
"localId": "Ej7IyHWVnGTQCjSX0kH95Wa9YTo2",
"email": "admin@admin.com"
},
"sucess": true
}Todos los endpoints de productos requieren autenticación. Incluye el token en el header:
Authorization: Bearer tu_token_jwt
Obtener todos los productos
GET /api/productsRespuesta:
{
"count": 0,
"products": [{
PRODUCTS
}],
"success": true
}Obtener un producto por ID
GET /api/products/:idCrear un nuevo producto
POST /api/products/create
Content-Type: application/json
Authorization: Bearer tu_token_jwt
{
"name": "Nuevo Producto",
"description": "Descripción detallada",
"price": 149.99,
"stock": 30,
"category": "Electrónica",
"imageUrl": "https://ejemplo.com/imagen.jpg"
}Eliminar un producto
DELETE /api/products/:id
Authorization: Bearer tu_token_jwtLa aplicación implementa autenticación basada en tokens JWT:
- El usuario se autentica enviando credenciales al endpoint
/auth/login - Si las credenciales son válidas, se genera un token JWT
- El cliente debe incluir este token en el header
Authorizationde las peticiones subsiguientes - El middleware de autenticación valida el token antes de permitir el acceso a rutas protegidas
- Firebase se encarga de la autentificación
El middleware verifica:
- Presencia del token en el header Authorization
- Validez del token JWT
- Expiración del token
Las siguientes rutas están protegidas y requieren autenticación:
GET /api/productsGET /api/products/:idPOST /api/products/createDELETE /api/products/:id
Tomas Di Leo
- GitHub: @TomasDiLeo
- Proyecto desarrollado como parte del curso de Backend en TechLab
Agradecimientos especiales a TechLab y a los instructores por su guía durante el desarrollo de este proyecto final.
Si este proyecto te resulta útil o te sirve de referencia para aprender, no dudes en darle una estrella en GitHub.