Este tutorial te guiará en la construcción de una API RESTful usando Node.js, Express.js y MongoDB. Cubriremos la configuración de tu entorno, la definición de endpoints de la API y el manejo de la persistencia de datos. Al final, tendrás una API funcional lista para expandir.
Tabla de Contenido
- Introducción a las APIs REST y MongoDB
- Configuración de tu Entorno de Desarrollo
- Configuración del Proyecto y Dependencias
- Conexión a MongoDB
- Definición de Endpoints de la API (Operaciones CRUD)
- Probando tu API
- Implementando un Manejo Robusto de Errores
- Conclusión y Siguientes Pasos
Introducción a las APIs REST y MongoDB
REST (Representational State Transfer) es un estilo arquitectónico para construir servicios web escalables y mantenibles. Las APIs REST usan métodos HTTP estándar (GET, POST, PUT, DELETE) para interactuar con recursos identificados por URLs. MongoDB es una base de datos NoSQL, orientada a documentos, que proporciona flexibilidad para almacenar y recuperar datos. Esta combinación crea una base sólida para muchas aplicaciones.
Configuración de tu Entorno de Desarrollo
Antes de comenzar, asegúrate de tener Node.js y npm (Node Package Manager) instalados. Puedes descargarlos desde nodejs.org. También, asegúrate de que MongoDB esté instalado y funcionando. Puedes descargarlo desde mongodb.com.
Configuración del Proyecto y Dependencias
Crea un nuevo directorio de proyecto y navega a él en tu terminal. Inicializa un nuevo proyecto Node.js:
npm init -y
Instala las dependencias necesarias:
npm install express mongoose body-parser
express
: Un framework de aplicaciones web Node.js mínimo y flexible.mongoose
: Una librería de Modelado de Datos de Objetos (ODM) para MongoDB y Node.js.body-parser
: Middleware para analizar cuerpos de solicitud JSON.
Conexión a MongoDB
Crea un archivo llamado server.js
y agrega el siguiente código:
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// Cadena de conexión MongoDB - reemplaza con tus detalles de conexión
const mongoURI = 'mongodb://localhost:27017/mydatabase';
mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('Conectado a MongoDB'))
.catch(err => console.error('Error conectando a MongoDB:', err));
app.use(bodyParser.json());
app.listen(port, () => console.log(`Servidor escuchando en el puerto ${port}`));
Definición de Endpoints de la API (Operaciones CRUD)
Vamos a crear un modelo simple y endpoints para gestionar elementos. Agrega esto a tu archivo server.js
:
const ItemSchema = new mongoose.Schema({
name: String,
description: String
});
const Item = mongoose.model('Item', ItemSchema);
// POST /items - Crear un nuevo elemento
app.post('/items', async (req, res) => {
try {
const newItem = new Item(req.body);
const savedItem = await newItem.save();
res.status(201).json(savedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items - Obtener todos los elementos
app.get('/items', async (req, res) => {
try {
const items = await Item.find({});
res.json(items);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items/:id - Obtener un elemento único por ID
app.get('/items/:id', async (req, res) => {
try {
const item = await Item.findById(req.params.id);
if (!item) return res.status(404).json({ message: 'Elemento no encontrado' });
res.json(item);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// PUT /items/:id - Actualizar un elemento
app.put('/items/:id', async (req, res) => {
try {
const updatedItem = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });
if (!updatedItem) return res.status(404).json({ message: 'Elemento no encontrado' });
res.json(updatedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// DELETE /items/:id - Eliminar un elemento
app.delete('/items/:id', async (req, res) => {
try {
const deletedItem = await Item.findByIdAndDelete(req.params.id);
if (!deletedItem) return res.status(404).json({ message: 'Elemento no encontrado' });
res.json({ message: 'Elemento eliminado' });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Probando tu API
Usa herramientas como Postman o curl para probar los endpoints de tu API. Envía solicitudes POST a /items
para crear nuevos elementos, solicitudes GET a /items
para recuperar todos los elementos, y usa solicitudes GET, PUT y DELETE para elementos individuales usando sus IDs.
Implementando un Manejo Robusto de Errores
El código de ejemplo incluye manejo básico de errores. Para producción, implementa un manejo de errores, registro e validación de entrada más completos.
Conclusión y Siguientes Pasos
¡Has construido con éxito una API REST básica con MongoDB! Expande esto añadiendo autenticación, autorización, validación de datos y un manejo de errores más sofisticado. Considera usar una conexión de base de datos lista para producción y explora características más avanzadas de tanto Express.js como Mongoose.