Complete "Lección 1: Fundamentos de REST y HTTP" primero para desbloquear esta lección.Ir a la lección anterior

Introducción

Antes de poder construir una API REST, necesitas una base de proyecto funcional. Esta lección recorre cada paso: inicializar un proyecto Node.js, instalar Express, escribir un servidor mínimo y confirmar que realmente funciona. Al final tendrás un servidor en ejecución que responde a peticiones HTTP — la base sobre la que se construye cada lección posterior.

Se asume que Node.js (v18 o posterior) y npm ya están instalados en tu máquina. Ejecuta estos dos comandos para verificarlo antes de continuar:

bash
node --version
npm --version

Si alguno de los comandos devuelve un error, descarga Node.js desde nodejs.org (npm viene incluido con él).

Inicialización del proyecto

Crea un nuevo directorio para tu proyecto e inicialízalo como un paquete Node.js. El comando init genera un archivo package.json, que registra los metadatos y las dependencias de tu proyecto.

bash
mkdir my-rest-api
cd my-rest-api
npm init -y

El flag -y acepta todos los valores predeterminados para que no se te solicite el nombre del proyecto, la versión, etc. Puedes editar package.json manualmente en cualquier momento. En este punto tu directorio contiene solo ese único archivo — aún no hay código.

A continuación, instala Express:

bash
npm install express

Esto descarga Express y sus dependencias en una carpeta node_modules y registra la dependencia en package.json bajo "dependencies". También verás que se crea un package-lock.json — este bloquea las versiones exactas de las dependencias para que cada desarrollador de tu equipo instale paquetes idénticos.

diagrama de flujo que muestra 3 pasos: npm init crea package.json, npm install express añade Express a node_modules y actualiza las dependencias de package.json, luego server.js importa Express para crear la app

Construcción del primer servidor

Crea un archivo llamado server.js en la raíz del proyecto. Este archivo es el punto de entrada de tu aplicación.

javascript
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.json({ message: 'Server is running' });
});
app.listen(PORT, () => {
console.log(`Server listening on http://localhost:${PORT}`);
});

Recorrido por cada parte: require('express') importa el framework. Llamar a express() crea una instancia de la aplicación almacenada en app. app.get() registra un manejador de ruta — el primer argumento es la ruta URL, el segundo es una callback que recibe el objeto de petición (req) y el objeto de respuesta (res). res.json() envía una respuesta JSON y establece el encabezado Content-Type automáticamente. Finalmente, app.listen() vincula el servidor a un puerto y comienza a aceptar conexiones.

Inicia el servidor:

bash
node server.js

Deberías ver el mensaje en la consola. Abre un navegador en http://localhost:3000 o usa curl:

bash
curl http://localhost:3000

Salida esperada:

json
{"message": "Server is running"}

Mejora del flujo de trabajo de desarrollo

Reiniciar el servidor manualmente después de cada cambio de código es tedioso. Instala nodemon como dependencia de desarrollo — observa tus archivos y reinicia automáticamente cuando detecta cambios.

bash
npm install --save-dev nodemon

Luego añade un script dev a package.json:

json
{
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
}
}

Ahora ejecuta el servidor en modo desarrollo:

bash
npm run dev

Edita server.js, guarda y nodemon reinicia el proceso sin que tengas que hacer nada. El script start se mantiene para uso en producción, donde nodemon no es apropiado.

Una mejora más: parsea los cuerpos de las peticiones JSON entrantes. Express no lo hace por defecto. Añade esta línea de middleware antes de tus rutas:

javascript
app.use(express.json());

Sin esto, req.body será undefined cuando un cliente envíe una petición POST con un payload JSON. Añadirlo ahora evitará confusiones de depuración más adelante.

Resumen

Ahora tienes un proyecto Express completamente funcional: un package.json que rastrea las dependencias, Express instalado, un server.js que escucha en el puerto 3000, una ruta GET funcional, nodemon para iterar rápidamente y el parseo de cuerpos JSON habilitado. Este es exactamente el esqueleto que se utiliza como punto de partida para cada patrón de API REST cubierto en el resto del curso. La siguiente lección pasa al enrutamiento — definir múltiples endpoints y organizarlos de forma limpia a medida que crece la API.