Ejercicio: API REST y verbos HTTP
Objetivo
Construir en tu computadora una API CRUD de libros con Express y reproducir en JavaScript puro el repositorio en memoria que hay detrás de un CRUD.
Cómo se trabaja
La parte A es práctica real en tu terminal. La parte B son dos funciones de JavaScript puro: estadoExito y crearRepositorio, el «almacén» que usan las rutas. Pega solo el JavaScript, sin <script>.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: ¿el id no coincide?
req.params.id es un texto. Conviértelo con Number antes de buscar.
💡 Pista 2: crearRepositorio
Devuelve un objeto con funciones; el array y el contador viven dentro de crearRepositorio (clausura), no fuera.
💡 Pista 3: reemplazar frente a actualizar
reemplazar construye { id, ...datos }; actualizar construye { ...actual, ...cambios, id }.
🔎 Comprueba tu trabajo
Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.
✅ Ver una solución posible
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
function estadoExito(verbo) {
const estados = { GET: 200, POST: 201, PUT: 200, PATCH: 200, DELETE: 204 };
return estados[String(verbo).toUpperCase()] ?? null;
}
function crearRepositorio() {
let items = [];
let siguienteId = 1;
return {
listar() {
return items;
},
obtener(id) {
return items.find((x) => x.id === id) ?? null;
},
crear(datos) {
const nuevo = { id: siguienteId++, ...datos };
items.push(nuevo);
return nuevo;
},
reemplazar(id, datos) {
const i = items.findIndex((x) => x.id === id);
if (i === -1) return null;
items[i] = { id, ...datos };
return items[i];
},
actualizar(id, cambios) {
const i = items.findIndex((x) => x.id === id);
if (i === -1) return null;
items[i] = { ...items[i], ...cambios, id };
return items[i];
},
borrar(id) {
const i = items.findIndex((x) => x.id === id);
if (i === -1) return false;
items.splice(i, 1);
return true;
},
};
}
💡 🏁 Reto extra (opcional)
Haz que GET /libros admita ?orden=titulo para ordenar alfabéticamente y ?limite=2 para devolver solo los primeros. Recuerda convertir el límite a número.