Introducción: REST API es sencillo
REST API (Transferencia de Estado Representacional) es el "idioma" en el que se comunican diferentes programas en internet. Si quieres que tu aplicación web entregue datos a otra aplicación (por ejemplo, un cliente móvil o un frontend en React), necesitas una API. Y hoy la escribiremos en JavaScript (Node.js) desde cero en solo 30 minutos.
Usaremos la biblioteca más popular: Express. Es simple, flexible y perfecta para principiantes. Al final del artículo, tendrás un servidor funcional con cuatro operaciones CRUD principales (crear, leer, actualizar, eliminar). ¡Vamos allá!
Paso 1: Preparación del entorno e instalación de Express
Antes de escribir código, asegúrate de tener instalado Node.js. Puedes verificarlo en la terminal:
node -vnpm -vSi se muestran las versiones, todo está listo. Si no, descarga Node.js desde el sitio oficial.
Ahora crea una carpeta para el proyecto e inicialízalo:
mkdir my-first-apicd my-first-apinpm init -yEl archivo package.json está creado. Instalamos Express y la biblioteca para trabajar con UUID (para generar IDs únicos):
npm install express uuidListo. Crea el archivo index.js — este será el archivo principal de nuestro servidor.
Paso 2: Creamos un servidor simple en Express
Abre index.js y escribe la primera versión del servidor:
const express = require('express');const app = express();const PORT = 3000;
// Parseo de JSON del cuerpo de la solicitudapp.use(express.json());
// Ruta de pruebaapp.get('/', (req, res) => { res.send('¡Hola, mundo! ¡La REST API funciona!');});
// Inicio del servidorapp.listen(PORT, () => { console.log(`Servidor iniciado en http://localhost:${PORT}`);});Inicia el servidor con el comando:
node index.jsAbre el navegador y ve a la dirección http://localhost:3000. Si ves el mensaje de bienvenida, ¡todo funciona!
Analicemos el código: express.json() es un middleware que convierte automáticamente el JSON de la solicitud en un objeto de JavaScript. Esto es necesario para las solicitudes POST y PUT.
Paso 3: Agregamos datos y rutas CRUD
Ahora viene lo más interesante: crearemos un array con datos (en un proyecto real usarías una base de datos, pero para aprender, un array es suficiente). Será una lista de libros.
const { v4: uuidv4 } = require('uuid');
// Simulación de base de datoslet books = [];
// Crear un libro (POST)app.post('/api/books', (req, res) => { const { title, author } = req.body; if (!title || !author) { return res.status(400).json({ error: 'Debes proporcionar title y author' }); } const newBook = { id: uuidv4(), title, author }; books.push(newBook); res.status(201).json(newBook);});
// Obtener todos los libros (GET)app.get('/api/books', (req, res) => { res.json(books);});
// Obtener un libro por ID (GET)app.get('/api/books/:id', (req, res) => { const book = books.find(b => b.id === req.params.id); if (!book) { return res.status(404).json({ error: 'Libro no encontrado' }); } res.json(book);});
// Actualizar un libro (PUT)app.put('/api/books/:id', (req, res) => { const book = books.find(b => b.id === req.params.id); if (!book) { return res.status(404).json({ error: 'Libro no encontrado' }); } const { title, author } = req.body; if (title) book.title = title; if (author) book.author = author; res.json(book);});
// Eliminar un libro (DELETE)app.delete('/api/books/:id', (req, res) => { const index = books.findIndex(b => b.id === req.params.id); if (index === -1) { return res.status(404).json({ error: 'Libro no encontrado' }); } books.splice(index, 1); res.status(204