← Volver al Blog

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 Team10 min de lecturaprogramming
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

10 min lectura

# 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

  • Descarga Postman
  • Crea una nueva colección "Mi API"
  • 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

  • Visita railway.app
  • Conecta tu repositorio GitHub
  • Deploy automático
  • Opción 3: Render

  • Crea cuenta en render.com
  • "New Web Service"
  • Conecta repositorio
  • ---

    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 2026
    Share:

    Artículos Relacionados

    Read in English