¿Qué es la paginación basada en cursor? Tokens y compensaciones
Scrapeless Agent Browser permite que tu automatización navegue por interfaces de resultados dinámicas mientras tu aplicación hace un seguimiento del estado de la paginación y de los registros recopilados.
TL;DR
- Un cursor identifica una posición de continuación. Trata el token como opaco a menos que la API documente explícitamente su estructura.
- El orden estable necesita un criterio de desempate determinista. Una marca de tiempo por sí sola puede no distinguir registros creados en el mismo momento.
- La paginación por cursor no implica un snapshot. Las inserciones, eliminaciones y actualizaciones concurrentes siguen dependiendo del contrato de consistencia del servicio.
- Un checkpoint incluye la consulta así como el cursor. Almacena los registros antes de avanzar el estado de continuación confirmado.
Un cursor continúa una consulta ordenada concreta
La paginación basada en cursor divide un conjunto de resultados en páginas y le da al cliente una posición desde la cual continuar. En lugar de pedirle al servidor que salte una cantidad numerada de registros, el cliente devuelve un valor de continuación de la respuesta anterior. El servidor interpreta ese valor dentro de las reglas de ordenamiento y filtrado de la consulta. Por lo tanto, un cursor es significativo en relación con un recorrido particular de una colección.
La palabra cursor no prescribe un nombre de parámetro o una estructura de datos universales. Una API REST puede exponer un token de siguiente página o un enlace next, mientras que una conexión GraphQL puede exponer cursores en los edges e información de página. Lee el contrato de la API seleccionada antes de construir un bucle. Un cliente que adivina un parámetro llamado cursor puede enviar una solicitud HTTP válida que el servicio interprete de manera diferente a la operación de paginación prevista.
Guía de page-token de AIP-158 trata los tokens de página como opacos y vincula la continuación a los otros argumentos de la solicitud. Ese diseño mantiene al cliente independiente de la representación interna del backend. El token podría codificar una posición, hacer referencia a estado del lado del servidor o transportar detalles protegidos de la consulta. Su apariencia no puede demostrar qué mecanismo usa el servicio, y un cliente no debería necesitar ese conocimiento para continuar correctamente.Por qué importa el ordenamiento determinista
Un orden determinista le da a cada registro una posición definida en relación con el límite de continuación. Ordenar por una marca de tiempo no única puede dejar varios registros empatados en el borde de una página. Un diseño típico de keyset agrega un identificador único inmutable al orden de clasificación, por lo que el límite se refiere a una clave de ordenamiento completa. La elección exacta depende de la base de datos y del modelo de datos de la aplicación.
Considera un feed hipotético ordenado por hora de creación y ID de registro. La página siguiente comienza después del último par en la página actual, usando la misma dirección de ordenamiento. Si varios registros comparten una hora de creación, el ID determina cuáles ya han sido visitados. Este es un ejemplo conceptual más que una descripción de un endpoint de Scrapeless o una promesa sobre un plan de ejecución de base de datos en particular.
La guía de ordenamiento de PostgreSQL explica por qué los resultados limitados de una consulta requieren un orden predecible y por qué las filas de offset omitidas aún requieren trabajo del servidor. Un índice apropiado puede respaldar una búsqueda eficiente por keyset, pero la paginación por cursor por sí sola no prueba que ese índice exista. Inspecciona el plan de consulta real al evaluar un backend que operas; no infieras velocidad a partir de los nombres de los parámetros de la API.
Cursor, offset y keyset son términos relacionados
La paginación por offset identifica una posición por cuántas filas se deben omitir, mientras que un cursor identifica un límite de continuación a través del contrato de tokens del servicio. La paginación por keyset es una técnica de base de datos común para implementar ese límite con valores de campos ordenados. Una API puede exponer un cursor opaco mientras usa un método interno diferente. Mantén la interfaz pública y el algoritmo de almacenamiento separados al evaluar afirmaciones de rendimiento.
La paginación por offset puede admitir la navegación familiar por número de página y saltos directos a un offset seleccionado. El recorrido por cursor a menudo prioriza la continuación secuencial y puede no admitir un salto arbitrario de página. Ninguna de las interfaces proporciona automáticamente un total exacto barato. Los requisitos de producto como saltar a la página veinte, preservar una posición guardada o navegar hacia atrás deben evaluarse frente al comportamiento documentado de la API en lugar de asumirse.
| Función | Offset | Cursor |
|---|---|---|
| Posición | Cantidad a omitir o número de página | Posición o enlace proporcionado por el servidor |
| Saltos directos | A menudo admitidos dentro de ciertos límites | Solo cuando el servicio los admite |
| Cambios de datos | Las posiciones pueden desplazarse | Depende del orden y de la consistencia |
| Estado del cliente | Consulta y posición de página | Consulta y cursor opaco |
Las conexiones GraphQL definen un contrato específico
La GraphQL Cursor Connections Specification define estructuras de conexión y edge, argumentos de paginación hacia adelante y hacia atrás, e información de página. En ese modelo, los cursores pertenecen a los edges y la información de página describe si hay más edges disponibles. Esos nombres de campos son convenciones de esa especificación, no nombres obligatorios para cada API que use un cursor.
El recorrido hacia adelante comúnmente usa un tamaño de página junto con un cursor after; el recorrido hacia atrás usa el límite before correspondiente. La especificación de conexiones requiere que el orden de los edges se mantenga consistente entre esas direcciones. Un usuario que se mueve hacia atrás no debería recibir una inversión inexplicada del orden de negocio de la colección. Las implementaciones y los clientes necesitan ponerse de acuerdo sobre si se está hablando del orden de visualización o de la dirección del recorrido.
Usa la condición de finalización documentada en lugar de estimarla solo a partir de la longitud de la página. Algunas API pueden devolver menos elementos de los solicitados y aun así proporcionar continuación. Otras definen una página final mediante un token ausente o un indicador de continuación en falso. Una respuesta sin registros visibles también requiere una interpretación cuidadosa: los permisos, el filtrado y el comportamiento específico de paginación del endpoint pueden influir en lo que representa esa página.
Un cursor no congela un conjunto de datos cambiante
La paginación basada en cursor no ofrece automáticamente a todas las páginas la misma instantánea de la base de datos. Un servicio puede evaluar cada página frente a los datos actuales. Pueden aparecer nuevos registros antes del límite de continuación, eliminarse registros existentes y los campos de ordenación mutables pueden mover un registro a través de ese límite. Que esos cambios causen omisiones u observaciones repetidas depende de la implementación y de su política de consistencia.
Para una exportación histórica, busca una instantánea documentada, un trabajo de exportación o un límite superior estable. Para un flujo en vivo, define si el objetivo es enumerar una población fija u observar las entradas actuales. Son tareas diferentes. Un límite de nivel máximo puede ayudar a describir el alcance de la captura, pero solo debe usarse cuando la fuente admite las garantías necesarias de ordenación y filtrado.
Conserva las identidades de los registros en el destino para que se puedan reconocer las observaciones repetidas. La desduplicación puede evitar filas duplicadas, pero no puede demostrar que un registro no visto nunca fue saltado. Informa de la cobertura utilizando la señal de finalización explícita de la fuente y el límite de consulta de la captura. Un recorrido completo de la interfaz y un inventario histórico completo no siempre son afirmaciones equivalentes.
Conserva los filtros y confirma los puntos de control con cuidado
Un token de continuación debe viajar con la consulta que lo produjo. Almacena una huella de consulta que cubra la colección, los filtros, el orden de clasificación y otros argumentos relevantes. Si el usuario cambia el filtro, comienza un nuevo recorrido a menos que el servicio admita explícitamente combinar el token antiguo con la consulta nueva. Trata un token no válido como un problema de contrato que debe investigarse, no como prueba de que la colección está vacía.
Confirma los registros de la página antes de confirmar el siguiente estado de continuación. El punto de control debe describir lo que realmente ha llegado a un almacenamiento duradero. Incluye el recuento de registros aceptados, la identidad de la última página completada cuando esté disponible y si la fuente informó de más datos. Mantén los valores de tokens sensibles fuera de los registros compartidos; un token opaco puede contener información incluso cuando se indica al cliente que no lo inspeccione.
La vida útil del token también importa. Un token de estado de servidor puede caducar y un token autocontenido puede estar vinculado a un contexto de autorización o a una política de firma. Lee el período de retención documentado antes de planificar una exportación de larga duración. El estándar de paginación de cursor SCIM demuestra un contrato de cursor estandarizado específico, incluidos los atributos de continuación; sus reglas no deben proyectarse sobre API no relacionadas.
Las interfaces de navegador pueden ocultar el cursor subyacente
Un botón de cargar más o una lista de desplazamiento infinito pueden usar un cursor internamente sin exponer ese cursor en la URL de la página. La interacción visible es la interfaz de paginación del navegador, mientras que las solicitudes de red transportan la continuación de los datos. Comienza con el comportamiento que la página y tu autorización permitan. No fabriques tokens internos ni supongas que un endpoint no documentado es un contrato público estable.
Scrapeless Agent Browser puede proporcionar el entorno de navegador para una tarea autorizada de navegación de resultados. Usa los conceptos de Agent Browser para entender ese entorno y los patrones de paginación en el navegador para distinguir los tipos de navegación visibles. El colector todavía necesita identidades de registros, un alcance de recorrido acotado y una clara condición de parada.Revisa los precios de Scrapeless al estimar los costos de sesión, pero evalúa la calidad del conjunto de datos de forma independiente de la duración de la sesión. Una captura hipotética de catálogo podría registrar cada ID de producto visible después de que la página agregue nuevas tarjetas y detenerse cuando la interfaz señale su final. Ese proceso puede verificar el recorrido de navegador observado sin afirmar una instantánea transaccional del catálogo subyacente.
Elige la paginación con cursor para el requisito adecuado
La paginación con cursor es útil cuando el acceso secuencial a una colección ordenada se ajusta al requisito del producto. Puede evitar el costo de grandes desplazamientos en un diseño de backend adecuado y puede expresar un límite de continuación estable de manera más clara que los números de página. Es menos conveniente cuando los usuarios requieren saltos arbitrarios de página o cuando una exportación duradera debe sobrevivir más que la vida útil del token.
Evalúa en conjunto el orden de la consulta, el contrato de continuación, el marcador de fin, la vida útil del token y el comportamiento de consistencia. Escribe esas decisiones en los criterios de aceptación del consumidor antes de ampliar la colección. La calidad del conjunto de datos final depende de todos ellos. Un token opaco manejado correctamente es una parte de un recorrido fiable, mientras que la autorización, el almacenamiento y la cobertura siguen siendo responsabilidades de la aplicación que lo rodea.
Conclusión
Trata un cursor como estado de continuación para una única consulta ordenada, conserva las condiciones de finalización del servicio y confirma el almacenamiento antes de avanzar. La paginación con cursor puede admitir un acceso secuencial eficiente, pero un conjunto de datos defendible también necesita un límite de consistencia claro. Establece ese límite antes de dar por completo un recorrido largo.
Crea tu flujo de trabajo de datos web
Usa Agent Browser para la navegación dinámica mientras tu colector registra el estado de paginación y verifica la cobertura del conjunto de datos.
Regístrate hoy y obtén $5 en crédito gratis — no se requiere tarjeta de crédito.
Reclama tus $5 de crédito →Preguntas frecuentes
¿La paginación basada en cursor es lo mismo que la paginación basada en keyset?
La paginación basada en cursores no es necesariamente idéntica a la paginación por keyset. Un cursor es la interfaz de continuación de la API, mientras que la paginación por keyset es una técnica de base de datos que a menudo se usa para implementarla. El token puede ocultar otros mecanismos de backend, así que evalúa la eficiencia a partir de evidencias de la implementación en lugar de solo la interfaz.
¿Puede un cliente decodificar un cursor opaco?
Un cliente debe tratar un cursor opaco como un valor no interpretado. Incluso si su contenido parece legible, decodificarlo y construir reemplazos crea una dependencia de detalles internos no documentados. Devuelve el token exactamente como lo documenta la API y preserva la configuración de la consulta asociada.
¿La paginación con cursor evita por completo que haya registros duplicados o faltantes?
La paginación con cursor no evita por completo los registros duplicados o faltantes. Los datos mutables y la consistencia por solicitud aún pueden afectar el recorrido. Usa ordenamiento determinista, límites de snapshot documentados cuando estén disponibles, e identidades de registros en el almacenamiento, mientras informas los límites reales de consistencia de la captura.
¿La paginación con cursor puede saltar directamente a cualquier página?
La paginación con cursor admite saltos arbitrarios de página solo cuando el servicio ofrece esa capacidad. Muchas interfaces de cursor están diseñadas para un recorrido secuencial. Un producto que necesite selección directa de página debe confirmar la compatibilidad de navegación de la API antes de elegir su interfaz o prometer ese comportamiento.
¿Qué debe incluir un punto de control de paginación?
Un punto de control de paginación debe incluir el estado de continuación confirmado y la definición de la consulta que lo produjo. También registra el progreso del almacenamiento y la señal de finalización de la fuente. Avanza el punto de control solo después de que los registros aceptados estén almacenados, y protege los valores de cursor si pueden exponer contexto sensible de la consulta.