DevPath · Aprenda a programar ESPTEN

Rotas, REST e design de API

Paginação, filtragem e ordenação

Por que paginar

Uma listagem pode ter milhares de itens. Retornar todos é lento e caro. A solução padrão é expor parâmetros na query string que o cliente combina para pedir exatamente o que precisa.

Filtragem

Filtrar reduz a coleção àqueles que cumprem uma condição:

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

Ordenação

sort indica o campo, com um - na frente para descendente (?sort=-preco). O comparador deve retornar 0 nos empates (caso contrário, a ordem se torna instável) e funcionar igual com números e com texto:

// GET /produtos?sort=preco   ou   ?sort=-preco (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: mantêm sua ordem
  });
}

Paginação

Com page (página, começando em 1) e limit (tamanho da página) você calcula o corte do array com slice:

// GET /produtos?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, dados: pagina });

A ordem habitual é: filtrar → ordenar → paginar. Assim você pagina sobre o resultado já filtrado e ordenado.

Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Design REST: recursos e statusVer o módulo →