Cómo Crear Tu Primera API REST: Guía Paso a Paso
Aprende a crear una API REST desde cero con Node.js y Express. Tutorial completo para principiantes con ejemplos de código, mejores prácticas y despliegue.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# Cómo Crear Tu Primera API REST: Guía Paso a Paso
Las APIs REST son fundamentales en el desarrollo web moderno. Permiten que aplicaciones se comuniquen entre sí de forma eficiente y escalable.
Esta guía te enseña cómo crear tu primera API REST con Node.js y Express desde cero.
---
¿Qué es una API REST?
REST (Representational State Transfer) es un estilo de arquitectura para diseñar servicios web.Principios REST
✅ Stateless - Cada petición es independiente
✅ Client-Server - Separación de responsabilidades
✅ Cacheable - Respuestas pueden almacenarse
✅ Uniform Interface - URLs consistentes
Ejemplo de Uso
GET /api/usuarios → Obtener todos los usuarios
GET /api/usuarios/1 → Obtener usuario con ID 1
POST /api/usuarios → Crear nuevo usuario
PUT /api/usuarios/1 → Actualizar usuario 1
DELETE /api/usuarios/1 → Eliminar usuario 1
---
Requisitos Previos
Conocimientos
- JavaScript básico
- Conceptos de HTTP
- Terminal/línea de comandos
Software Necesario
# Verificar instalación de Node.js
node --version # v18 o superior
# Verificar npm
npm --version # v9 o superior
¿No tienes Node.js? Descárgalo en nodejs.org
---
Paso 1: Configurar el Proyecto
Crear Directorio
mkdir mi-api-rest
cd mi-api-rest
Inicializar npm
npm init -y
Esto crea package.json:
{
"name": "mi-api-rest",
"version": "1.0.0",
"description": "Mi primera API REST",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}
}
Instalar Dependencias
npm install express
npm install --save-dev nodemon
Express: Framework web minimalista
Nodemon: Reinicia el servidor automáticamente
---
Paso 2: Crear el Servidor Básico
Crear index.js
// index.js
const express = require('express');
const app = express();
const PORT = 3000;
// Middleware para procesar JSON
app.use(express.json());
// Ruta de prueba
app.get('/', (req, res) => {
res.json({ mensaje: '¡Bienvenido a mi API REST!' });
});
// Iniciar servidor
app.listen(PORT, () => {
console.log(Servidor corriendo en http://localhost:${PORT});
});
Actualizar package.json
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}
Probar el Servidor
npm run dev
Abre http://localhost:3000 - deberías ver:
{
"mensaje": "¡Bienvenido a mi API REST!"
}
---
Paso 3: Crear Rutas CRUD
Base de Datos Simulada
// Base de datos en memoria (temporal)
let usuarios = [
{ id: 1, nombre: 'Ana García', email: 'ana@example.com' },
{ id: 2, nombre: 'Carlos López', email: 'carlos@example.com' }
];
GET - Obtener Todos los Usuarios
app.get('/api/usuarios', (req, res) => {
res.json(usuarios);
});
Prueba:
curl http://localhost:3000/api/usuarios
GET - Obtener Usuario por ID
app.get('/api/usuarios/:id', (req, res) => {
const id = parseInt(req.params.id);
const usuario = usuarios.find(u => u.id === id);
if (!usuario) {
return res.status(404).json({ error: 'Usuario no encontrado' });
}
res.json(usuario);
});
Prueba:
curl http://localhost:3000/api/usuarios/1
POST - Crear Nuevo Usuario
app.post('/api/usuarios', (req, res) => {
const { nombre, email } = req.body;
// Validación básica
if (!nombre || !email) {
return res.status(400).json({
error: 'Nombre y email son requeridos'
});
}
const nuevoUsuario = {
id: usuarios.length + 1,
nombre,
email
};
usuarios.push(nuevoUsuario);
res.status(201).json(nuevoUsuario);
});
Prueba:
curl -X POST http://localhost:3000/api/usuarios \
-H "Content-Type: application/json" \
-d '{"nombre":"María","email":"maria@example.com"}'
PUT - Actualizar Usuario
app.put('/api/usuarios/:id', (req, res) => {
const id = parseInt(req.params.id);
const { nombre, email } = req.body;
const index = usuarios.findIndex(u => u.id === id);
if (index === -1) {
return res.status(404).json({ error: 'Usuario no encontrado' });
}
usuarios[index] = { id, nombre, email };
res.json(usuarios[index]);
});
DELETE - Eliminar Usuario
app.delete('/api/usuarios/:id', (req, res) => {
const id = parseInt(req.params.id);
const index = usuarios.findIndex(u => u.id === id);
if (index === -1) {
return res.status(404).json({ error: 'Usuario no encontrado' });
}
usuarios.splice(index, 1);
res.status(204).send();
});
---
Paso 4: Añadir Middleware
CORS - Permitir Peticiones Externas
npm install cors
const cors = require('cors');
app.use(cors());
Logger - Registrar Peticiones
app.use((req, res, next) => {
console.log(${req.method} ${req.url});
next();
});
Manejo de Errores
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Algo salió mal!' });
});
---
Paso 5: Validación de Datos
Instalar Joi
npm install joi
Usar Joi para Validar
const Joi = require('joi');
const esquemaUsuario = Joi.object({
nombre: Joi.string().min(3).max(50).required(),
email: Joi.string().email().required()
});
app.post('/api/usuarios', (req, res) => {
const { error } = esquemaUsuario.validate(req.body);
if (error) {
return res.status(400).json({
error: error.details[0].message
});
}
// Crear usuario...
});
---
Códigos de Estado HTTP
Códigos Comunes
| Código | Significado | Cuándo Usar |
|--------|-------------|-------------|
| 200 | OK | Petición exitosa (GET, PUT) |
| 201 | Created | Recurso creado (POST) |
| 204 | No Content | Eliminación exitosa (DELETE) |
| 400 | Bad Request | Datos inválidos |
| 404 | Not Found | Recurso no existe |
| 500 | Server Error | Error del servidor |
---
Probar la API con Postman
Instalar Postman
Crear Peticiones
GET Todos los Usuarios:GET http://localhost:3000/api/usuarios
POST Crear Usuario:
POST http://localhost:3000/api/usuarios
Body (JSON):
{
"nombre": "Laura Martínez",
"email": "laura@example.com"
}
---
Mejores Prácticas
✅ Usa Códigos HTTP Correctos
// ✅ Correcto
res.status(201).json(nuevoUsuario);
// ❌ Incorrecto
res.json(nuevoUsuario); // Siempre devuelve 200
✅ Valida Datos de Entrada
if (!req.body.email.includes('@')) {
return res.status(400).json({ error: 'Email inválido' });
}
✅ Maneja Errores Apropiadamente
try {
// Operación
} catch (error) {
res.status(500).json({ error: error.message });
}
✅ Usa Versionado de API
app.use('/api/v1/usuarios', rutasUsuarios);
---
Estructura del Proyecto Recomendada
mi-api-rest/
├── src/
│ ├── controllers/
│ │ └── usuarioController.js
│ ├── routes/
│ │ └── usuarios.js
│ ├── models/
│ │ └── Usuario.js
│ └── middlewares/
│ └── validacion.js
├── index.js
├── package.json
└── .env
---
Desplegar la API
Opción 1: Vercel
npm install -g vercel
vercel
Opción 2: Railway
Opción 3: Render
---
Próximos Pasos
Conectar a Base de Datos
npm install mongoose
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/midb');
Añadir Autenticación
npm install jsonwebtoken bcrypt
Documentar con Swagger
npm install swagger-ui-express
---
Conclusión
Has aprendido a crear una API REST completa:
✅ Configuración de proyecto Node.js
✅ Rutas CRUD (GET, POST, PUT, DELETE)
✅ Validación de datos
✅ Manejo de errores
✅ Mejores prácticas
Siguiente nivel: Conecta tu API a una base de datos MongoDB o PostgreSQL.---
Recursos Relacionados
---
Última actualización: 15 de febrero de 2026Artículos Relacionados
JavaScript y JSON: Guía Completa de JSON.parse() y JSON.stringify()
Domina el trabajo con JSON en JavaScript. Aprende JSON.parse(), JSON.stringify() y mejores prácticas para aplicaciones web modernas.
JSON en APIs REST: Guía Completa para Desarrolladores
Aprende a diseñar y consumir APIs REST con JSON. Incluye mejores prácticas, ejemplos en Node.js, Python y autenticación.
Errores Comunes JSON y Cómo Solucionarlos: Guía de Debugging
Aprende a identificar y resolver los errores JSON más comunes. Incluye ejemplos prácticos de debugging y mejores prácticas de validación.