Paginação
Listas por cursor, sem pular nem repetir linha.
Toda listagem devolve no máximo limite itens (padrão 25, máximo 100; acima disso vale o máximo) e um cursor para a página seguinte. A ordem é do mais novo para o mais antigo.
Resposta de uma listagem
{
"dados": [ ... ],
"paginacao": {
"proximoCursor": "eyJ0IjoiMjAyNi0xMC0yMFQxMjowMDowMC4wMDAwMDAiLCJpIjoiLi4uIn0",
"temMais": true
}
}Para a próxima página, repita a chamada com ?cursor=<proximoCursor>. Quando temMais for false, proximoCursor vem null e a lista acabou.
Node.js — percorrer todas as páginas
async function* todos(caminho) {
let cursor = null
do {
const url = new URL('https://frotasimples.com/api' + caminho)
url.searchParams.set('limite', '100')
if (cursor) url.searchParams.set('cursor', cursor)
const resposta = await fetch(url, { headers: { Authorization: `Bearer ${process.env.FROTASIMPLES_CHAVE}` } })
const { dados, paginacao } = await resposta.json()
yield* dados
cursor = paginacao.proximoCursor
} while (cursor)
}Por que cursor, e não página numerada
Com página numerada, um item criado enquanto você pagina empurra a lista e você recebe a mesma linha duas vezes. O cursor marca a posição exata: nada se repete e nada é pulado. Trate o cursor como texto opaco — o formato dele pode mudar.