Backend Development

API RESTful con Node.js, Express.js y MongoDB

Spread the love

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

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *