Saltar al contenido

Lección 9 de 12 · Lectura y práctica

Paginacion: limit, cursor y orden estable

Paginacion Listas largas necesitan paginacion. Aprende un enfoque simple y estable para APIs. Conceptos clave limit + cursor orden estable por created_at + id evitar OFFSET en tablas grandes Ejemplo Cursor tipico: created_at + id.

Del concepto a la práctica

Taller de esta lección

Un cursor útil representa la última posición de un orden total. Con created_at e id, dos filas con la misma fecha siguen teniendo desempate determinista. La siguiente consulta debe pedir registros posteriores a esa pareja, no saltar por un offset frágil.

Ejemplo resuelto

Registros ordenados: (10:00,id1), (10:00,id2), (10:05,id3). Con limit=2, la primera página contiene id1 e id2 y su cursor es (10:00,id2). La siguiente empieza después de esa pareja y devuelve id3.

Usa fechas completas2026-01-01T10:00:00Z para id1/id2 y2026-01-01T10:05:00Z para id3. Con un cursor válido (fecha,id2), la consulta es:

sql
SELECT id,created_at FROM courses
WHERE (created_at,id) > ($1::timestamptz,$2::bigint)
ORDER BY created_at ASC,id ASC
LIMIT $3;

Valida limit como entero entre1 y100 y los dos campos del cursor antes de parametrizar. Para saber si existe otra página pide limit+1, devuelve como máximo limit y emite cursor solo cuando sobró una fila. Un orden estable no da una instantánea entre solicitudes si cambian filas; declara la política de modificaciones concurrentes y usa claves estables.

Pruébalo

  1. Inserta exactamente esos tres registros.

  2. Ordena por created_at ASC, id ASC.

  3. Solicita límite 2 y usa el último par como cursor siguiente.

Error frecuente: ordenar solo por fecha. Corrige añadiendo un desempate único, normalmente el identificador.

Ejercicio: repite la segunda solicitud con el mismo cursor.

Comprueba tu resultado

id3 aparece una vez; la unión de ambas páginas contiene id1, id2 e id3, sin duplicados ni omisiones. Si no hay más filas, devuelve un cursor siguiente nulo.

Navegador, API y base de datos conectados por solicitudes, consultas y respuestas en sentidos opuestos.
CursaloMapa de práctica
Del navegador a los datos

El navegador envía una solicitud a la API. El servidor valida la operación y consulta los datos; después devuelve una respuesta que el navegador puede mostrar. La base de datos se comunica con el servidor y no directamente con el navegador.

Ver la infografía en tamaño completo ↗

Paginacion

Listas largas necesitan paginacion. Aprende un enfoque simple y estable para APIs.

Conceptos clave

  • limit + cursor
  • orden estable por created_at + id
  • evitar OFFSET en tablas grandes

Ejemplo

Cursor tipico: created_at + id para no perder ni duplicar items.

Ejercicio

  • Implementa GET /items?limit=20&cursor=...
  • Asegura orden estable y repetible.

Checklist de mastery

  • Puedo paginar sin OFFSET.
  • Mi API no duplica items entre paginas.

Sigue con Node.js y APIs con Express

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.