Pagination
Les collections paginées portent un curseur. Suivez-le jusqu'à ce que l'API dise qu'il n'y en a plus :
{
"data": [ ... ],
"meta": { "has_more": true, "next_cursor": "eyJpZCI6InByb3BfMWI3N2UwYTRmMiJ9" }
}La seule condition d'arrêt correcte
Arrêtez quand has_more vaut faux. Pas quand une page revient plus courte que la
limite demandée, l'erreur que presque tout le monde commet en premier : une page
pleine peut être la dernière, et une page courte peut encore porter un curseur.
Pourquoi un curseur plutôt qu'un numéro de page
Les curseurs sont stables face aux insertions. Paginer par décalage sur un catalogue en cours d'écriture sautera des fiches et vous en montrera d'autres deux fois, et il le fera silencieusement.
Laissez le client s'en charger
Chaque client Skautik dispose d'un itérateur qui suit le curseur : c'est donc une ligne plutôt qu'une boucle.
for await (const property of skautik.properties.listAll({ city: "Berlin" })) {
console.log(property.title);
}for property in skautik.properties.list_all(city="Berlin"):
print(property.title)for property, err := range skautik.AllProperties(
client.Properties.ListProperties(ctx).City("Berlin"),
) {
if err != nil {
return err
}
fmt.Println(property.Title)
}Ils s'arrêtent aussi si le curseur cesse d'avancer : une panne de notre côté ne peut donc pas devenir chez vous une boucle qui ne se termine jamais.