DevPath · Aprende a programar ESPTEN

Rutas, REST y diseño de API

Paginación, filtrado y ordenación

Por qué paginar

Un listado puede tener miles de elementos. Devolverlos todos es lento y caro. La solución estándar es exponer parámetros en la query string que el cliente combina para pedir justo lo que necesita.

Filtrado

Filtrar reduce la colección a los que cumplen una condición:

// GET /productos?categoria=libros
let lista = productos;
if (req.query.categoria) {
  lista = lista.filter((p) => p.categoria === req.query.categoria);
}

Ordenación

sort indica el campo, con un - delante para descendente (?sort=-precio). El comparador debe devolver 0 en los empates (si no, el orden se vuelve inestable) y funcionar igual con números y con texto:

// GET /productos?sort=precio   o   ?sort=-precio (descendente)
if (req.query.sort) {
  const desc = req.query.sort.startsWith("-");
  const campo = desc ? req.query.sort.slice(1) : req.query.sort;
  lista = [...lista].sort((a, b) => {
    if (a[campo] < b[campo]) return desc ? 1 : -1;
    if (a[campo] > b[campo]) return desc ? -1 : 1;
    return 0; // empate: mantienen su orden
  });
}

Paginación

Con page (página, empezando en 1) y limit (tamaño de página) calculas el corte del array con slice:

// GET /productos?page=2&limit=10
const page = Number(req.query.page) || 1;
const limit = Number(req.query.limit) || 10;
const inicio = (page - 1) * limit;
const pagina = lista.slice(inicio, inicio + limit);
res.json({ page, limit, total: lista.length, datos: pagina });

El orden habitual es: filtrar → ordenar → paginar. Así paginas sobre el resultado ya filtrado y ordenado.

Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Diseño REST: recursos y estadosVer el módulo →