Paginación
Un objeto de página, en cada colección.
Cada colección responde { data, page }:
{
"data": [],
"page": {
"number": 1,
"size": 50,
"total_items": 128,
"total_pages": 3,
"has_more": true
}
}Pasa ?page= para avanzar. Las páginas empiezan en 1. Cualquier cosa fuera de 1
a 1000 responde 400 invalid_request en lugar de una página vacía, para que un
bucle que perdió la cuenta se detenga en vez de girar.
El catálogo es la única excepción en el tamaño: pagina de 24 en 24 y se detiene en la página 100, porque lee un índice de búsqueda y no una tabla.
curl "https://uloggd.com/api/v1/library?page=2" \
-H "Authorization: Bearer ulg_live_..."has_more sale del total, no del tamaño de data. Una página que vuelve
corta es la última, pero la forma honesta de preguntar es has_more.
Las copias andan por cursor
/api/v1/library/copies es la única colección que no anda por número de
página. Responde { data, page: { size, has_more }, next_cursor }, y la página
siguiente es ?cursor= con lo que vino en next_cursor.
curl "https://uloggd.com/api/v1/library/copies?limit=24&cursor=WyIyMDI2…" \
-H "Authorization: Bearer ulg_live_..."El motivo es que un estante cambia mientras se recorre. Registrar una copia mientras alguien está en la página 2 empuja todo un lugar adelante, y un desplazamiento devolvería otra vez la fila que la página 1 ya mostró. El cursor lleva juntos la clave del orden y el id de la fila, así que apunta a un lugar y no a un conteo.
Cambiar sort es empezar de nuevo: el cursor pertenece al orden en que se hizo.