Explica cómo diseñar endpoints de colección con filtros permitidos, orden estable, límites y paginación por offset o cursor sin acoplar el contrato al ORM.
Última actualización
Actualizada
Nivel
Aplicación
Una colección HTTP necesita límites, orden estable y una traducción segura hacia la base de datos. Sin ese contrato, el coste y los resultados se vuelven impredecibles.
Paginación, filtros y ordenamiento forman un pequeño lenguaje público. El cliente no debe controlar columnas, operadores o joins internos directamente.
SELECT*FROM orders
WHERE branch_id = $1ORDERBY created_at DESC, id DESCLIMIT $2OFFSET $3;
Es simple y permite saltar a una página, pero offsets profundos obligan al motor a recorrer y descartar filas. Además, inserciones entre requests pueden desplazar resultados.
SELECT*FROM orders
WHERE branch_id = $1AND(created_at, id)<($2, $3)ORDERBY created_at DESC, id DESCLIMIT $4;
El cursor representa la última posición. Es eficiente para scroll continuo y estable ante inserciones anteriores, pero no salta fácilmente a “página 40”.
La API y los índices deben evolucionar juntos. Un endpoint que filtra por branch_id, status y ordena por fecha puede necesitar un índice compuesto apropiado. No crees uno por cada combinación sin medir.