RESTful API robusta diseñada para gestionar operaciones bancarias. Este proyecto implementa soluciones avanzadas para garantizar la consistencia de datos, el manejo de concurrencia y la seguridad perimetral en cada movimiento financiero.
En el sector financiero, el dinero no puede "desaparecer". Utilicé Mongoose Sessions para asegurar que las transferencias sean atómicas:
Si el emisor tiene saldo pero el proceso de acreditación al receptor falla, el sistema realiza un rollback automático. El flujo garantiza que el débito y el crédito ocurran como una sola unidad de trabajo indivisible.
Implementé un sistema de autenticación basado en JSON Web Tokens (JWT) y encriptación de grado industrial:
- Bcryptjs: Las contraseñas nunca se almacenan en texto plano; se utiliza un proceso de hashing con salts antes de persistir en la base de datos mediante hooks de Mongoose.
- Protección de Rutas: Middleware personalizado para la verificación de tokens, asegurando que solo el propietario de la cuenta pueda realizar retiros o consultar movimientos sensibles.
Lógica de idempotencia_key en transacciones críticas. Esto garantiza que si un error de red provoca un reintento de envío, el sistema detecte la transacción procesada y evite cargos dobles, protegiendo el patrimonio del cliente.
Organización bajo el patrón Model-Service-Controller, separando responsabilidades para facilitar el mantenimiento:
- Models: Esquemas con validaciones estrictas y middlewares de ciclo de vida (
pre-save) optimizados para funciones asíncronas. - Services: El "cerebro" de la aplicación donde reside la lógica de negocio, el manejo de sesiones y las reglas financieras.
- Controllers: Orquestación de peticiones HTTP y manejo estandarizado de respuestas.
| Método | Ruta | Descripción | Auth |
|---|---|---|---|
POST |
/api/registrar |
Crea un nuevo cliente con password encriptada. | No |
POST |
/api/login |
Autenticación y generación de Token JWT. | No |
POST |
/api/depositar |
Depósito de fondos en cuenta (abierto a terceros). | No |
POST |
/api/retirar |
Realiza un retiro de efectivo validando saldo. | Sí (JWT) |
POST |
/api/transferencia |
Envío de dinero con seguridad ACID e Idempotencia. | Sí (JWT) |
GET |
/api/movimientos |
Historial inteligente basado en el token del usuario. | Sí (JWT) |
DELETE |
/api/eliminar/:id |
Elimina un registro del sistema. | No |
GET |
/docs |
Documentación Interactiva (Scalar). | No |
- Runtime: Node.js
- Framework: Express.js
- DB: MongoDB Atlas con Mongoose ODM
- Auth: JSON Web Tokens (JWT) & Bcryptjs
- Documentación: Scalar API Reference
- Entorno: Dotenv para gestión segura de credenciales
- Clonar el repositorio:
git clone [https://github.com/oamc-21/node-bank-rest-api.git](https://github.com/oamc-21/node-bank-rest-api.git)
- Instalar dependencias:
npm install
- Configurar Variables de Entorno:
Crea un archivo
.enven la raíz del proyecto:PORT=8383 MONGO_URI=tu_cadena_de_conexion_a_mongodb JWT_SECRET=tu_clave_secreta_para_tokens
- Iniciar el Servidor:
npm start
Una vez encendido el servidor, puedes visitar http://localhost:3000/docs para acceder a la referencia completa de la API. La documentación Scalar permite probar el flujo de autenticación y las operaciones bancarias directamente desde el navegador de forma interactiva.
Desarrollado con enfoque en ingeniería de software y mejores prácticas de Backend por Ottoniel Morraz.