Creando nuestra primera REST API
En esta clase damos un paso fundamental: empezamos a construir nuestra primera REST API real usando Express.
Hasta ahora hemos explorado conceptos de forma aislada: rutas, parámetros dinámicos, query params, filtros y paginación. Ahora es el momento de unificar todo ese conocimiento en una estructura coherente y profesional.
¿Qué es una REST API en este punto?
Aunque el concepto de REST es amplio, en esta etapa del curso nos centraremos en sus pilares básicos:
- Recursos: Identificamos entidades claras (en este caso,
jobs). - Endpoints semánticos: Las URLs deben ser intuitivas y seguir una estructura lógica.
- Formato JSON: Usamos el estándar de la industria para el intercambio de datos.
- Verbos HTTP: Utilizamos el método correcto para cada acción (empezando por
GETpara lectura).
Todavía no integraremos bases de datos ni autenticación; nuestro objetivo ahora es dominar el flujo de trabajo y el diseño de la API.
Punto de partida: Datos en memoria
Para mantener la simplicidad y centrarnos en el diseño de los endpoints, seguiremos trabajando con un array de datos simulados:
const jobs = [
{
id: 1,
title: 'Frontend Developer',
company: 'Data Driven Co',
location: 'Ciudad de México'
}
]
1. Listar la colección completa (GET /jobs)
El primer endpoint de nuestra REST API permite obtener todos los recursos de la colección:
app.get('/jobs', (req, res) => {
// Aquí podríamos aplicar también la lógica de filtrado y paginación vista anteriormente
return res.json(jobs)
})
Este endpoint es la base de nuestra API. Responde con un código de estado 200 OK (por defecto en Express) y entrega los datos estructurados en JSON.
2. Obtener un recurso individual (GET /jobs/:id)
Para acceder a un empleo concreto, utilizamos un parámetro dinámico en la ruta:
app.get('/jobs/:id', (req, res) => {
const { id } = req.params
// Buscamos el empleo por su ID (recuerda convertir el ID a número si es necesario)
const job = jobs.find(job => job.id === Number(id))
if (!job) {
return res.status(404).json({ message: 'Empleo no encontrado' })
}
return res.json(job)
})
Detalles clave:
- Ruta RESTful: Usamos
/jobs/:idpara identificar un recurso específico. - Control de errores: Si el recurso no existe, devolvemos un código
404 Not Founden lugar de una respuesta vacía o un error del servidor.
¿Por qué este paso es tan importante?
Hasta ahora hacíamos pruebas técnicas sueltas. A partir de aquí, dejamos de ver el servidor como “un script que responde cosas” para verlo como una interfaz profesional que puede ser consumida por:
- Aplicaciones web (React, Vue, Angular).
- Aplicaciones móviles.
- Otros servicios de backend.
Lo que hemos aprendido
- ✅ Cómo unificar filtros, parámetros y respuestas en una API coherente.
- ✅ La importancia de diseñar rutas que representen recursos.
- ✅ Cómo manejar la búsqueda de elementos individuales y el error 404.
- ✅ La transición de “scripts de servidor” a una “arquitectura de API”.
En la siguiente clase vamos a crear un CRUD y explicaremos qué significa.