Back

Cómo Construir una API REST Mínima en Node.js

Cómo Construir una API REST Mínima en Node.js

Necesitas un backend rápido para tu proyecto frontend. Tal vez sea un prototipo, desarrollo local o un servicio de producción simple. Configurar una API REST en Node.js no debería requerir una semana de configuración.

Esta guía te lleva paso a paso por la construcción de una API REST mínima usando Node.js moderno y Express 5. Obtendrás análisis de JSON, manejo de errores adecuado y una estructura limpia—todo en ~80 líneas de código.

Puntos Clave

  • Construye una API REST funcional con Express 5 en ~80 líneas de código
  • Usa middleware integrado para análisis de JSON sin dependencias externas
  • Implementa patrones de respuesta consistentes con códigos de estado HTTP apropiados
  • Añade manejo centralizado de errores para reducir fallos inesperados del servidor

Requisitos Previos

Antes de comenzar, asegúrate de tener:

  • Node.js 24 LTS o más reciente instalado (puede descargarse desde el sitio oficial de Node.js)
  • Un editor de código
  • Conocimientos básicos de JavaScript

Configuración del Proyecto

Crea un nuevo directorio e inicializa tu proyecto:

mkdir minimal-api
cd minimal-api
npm init -y

Instala Express 5:

npm install express

Abre package.json y añade "type": "module" para habilitar las importaciones ESM. Tu archivo debe incluir:

{
  "type": "module",
  "scripts": {
    "start": "node server.js"
  }
}

Construyendo tu API con Express 5

Crea server.js con el siguiente código:

import express from 'express'

const app = express()
const PORT = process.env.PORT || 3000

// Built-in JSON parsing middleware
app.use(express.json())

// In-memory data store
let items = [
  { id: 1, name: 'First item' },
  { id: 2, name: 'Second item' }
]

let nextId = 3

// GET all items
app.get('/api/items', (req, res) => {
  res.json({ data: items })
})

// GET single item
app.get('/api/items/:id', (req, res) => {
  const item = items.find(i => i.id === parseInt(req.params.id))
  if (!item) {
    return res.status(404).json({ error: 'Item not found' })
  }
  res.json({ data: item })
})

// POST new item
app.post('/api/items', (req, res) => {
  const { name } = req.body
  if (!name) {
    return res.status(400).json({ error: 'Name is required' })
  }
  const newItem = { id: nextId++, name }
  items.push(newItem)
  res.status(201).json({ data: newItem })
})

// DELETE item
app.delete('/api/items/:id', (req, res) => {
  const index = items.findIndex(i => i.id === parseInt(req.params.id))
  if (index === -1) {
    return res.status(404).json({ error: 'Item not found' })
  }
  items.splice(index, 1)
  res.status(204).send()
})

// 404 handler for undefined routes
app.use((req, res) => {
  res.status(404).json({ error: 'Route not found' })
})

// Error handling middleware
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).json({ error: 'Internal server error' })
})

app.listen(PORT, () => {
  console.log(`Server running on http://localhost:${PORT}`)
})

Inicia tu servidor:

npm start

Entendiendo la Estructura de la API Backend en JavaScript

Esta configuración mínima de API REST en Node cubre lo esencial:

Análisis de JSON: Express 5 incluye express.json() como middleware integrado. No se necesitan paquetes externos (consulta la documentación de la API de Express).

Respuestas Consistentes: Cada endpoint devuelve JSON con una propiedad data o error. Esta previsibilidad ayuda al código frontend a manejar las respuestas de manera uniforme.

Códigos de Estado HTTP: La API usa códigos apropiados—200 para éxito, 201 para recursos creados, 204 para eliminaciones exitosas, 400 para solicitudes incorrectas, 404 para recursos no encontrados, y 500 para errores del servidor.

Manejo de Errores: El middleware de captura de errores previene que errores de rutas no manejados bloqueen tu servidor.

Probando tus Endpoints

Usa curl o cualquier cliente HTTP:

# Get all items
curl http://localhost:3000/api/items

# Get single item
curl http://localhost:3000/api/items/1

# Create item
curl -X POST http://localhost:3000/api/items \
  -H "Content-Type: application/json" \
  -d '{"name": "New item"}'

# Delete item
curl -X DELETE http://localhost:3000/api/items/1

Lo Que Esto No Incluye

Esta guía intencionalmente omite bases de datos, autenticación y validación compleja. Esas preocupaciones son importantes para sistemas de producción, pero añaden ruido cuando estás aprendiendo los fundamentos o creando un prototipo rápido.

Cuando estés listo para expandir, considera añadir:

  • Validación de entrada con una librería como Zod
  • Variables de entorno para configuración
  • Una conexión a base de datos para persistencia

Conclusión

Ahora tienes una API REST mínima funcional en Node.js con Express 5. El patrón aquí—respuestas JSON consistentes, códigos de estado apropiados y manejo centralizado de errores—escala bien a medida que tu API crece. Comienza con esta base, luego añade complejidad solo cuando tu proyecto lo demande.

Preguntas Frecuentes

Express 5 incluye soporte nativo de promesas para manejadores de rutas, lo que significa que las promesas rechazadas que se devuelven o lanzan activan automáticamente el middleware de errores. También elimina métodos obsoletos y mejora la coincidencia de rutas. La API principal permanece similar, por lo que la migración desde Express 4 es directa para la mayoría de los proyectos.

Un almacenamiento en memoria mantiene el ejemplo enfocado en la estructura de la API en lugar de la configuración de base de datos. Funciona bien para prototipos y aprendizaje. Para producción, reemplaza el array con una base de datos como PostgreSQL o MongoDB para persistir datos entre reinicios del servidor.

Instala el paquete cors con npm install cors, luego impórtalo y añade app.use(cors()) antes de tus rutas. Puedes pasar opciones para restringir qué orígenes pueden acceder a tu API. Esto es necesario cuando tu frontend se ejecuta en un dominio o puerto diferente al de tu backend.

Esta estructura proporciona una base sólida pero necesita adiciones para uso en producción. Añade validación de entrada, autenticación, limitación de tasa, registro de logs y una base de datos apropiada. Los patrones de formato de respuesta consistente y manejo de errores mostrados aquí escalan bien a medida que añades estas características.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay