Como paginar os endpoints de listagem — pageNumber, pageSize e a armadilha de trocar o tamanho no meio.
Os endpoints de listagem são paginados por dois atributos enviados no corpo da
requisição — não na query string:
{
"pageNumber": 1,
"pageSize": 50
}| Campo | Significado |
|---|---|
pageNumber | Qual página buscar. Começa em 1, não em 0 |
pageSize | Quantos itens por página. Máximo 100 |
A resposta
{
"pageNumber": 1,
"pageSize": 50,
"totalPages": 5,
"totalItems": 250,
"hasMorePages": true,
"items": [ { "…": "…" } ]
}Os registros vêm em items. Para saber se acabou, use hasMorePages — é
mais direto e menos sujeito a erro do que comparar pageNumber com
totalPages.
A armadilha: não mude o pageSize no meio
pageSize no meiopageNumber é um deslocamento calculado a partir do pageSize. Trocá-lo entre
uma chamada e a próxima faz a mesma pageNumber apontar para um recorte
diferente da coleção — e o resultado é registro pulado ou repetido, sem
nenhum erro que denuncie.
Escolha um pageSize antes de começar e mantenha até o fim da iteração.
# errado: o tamanho muda entre as páginas
{"pageNumber": 1, "pageSize": 100}
{"pageNumber": 2, "pageSize": 50} # não é a "segunda metade" do que veio antes
# certo: tamanho constante
{"pageNumber": 1, "pageSize": 100}
{"pageNumber": 2, "pageSize": 100}Percorrendo tudo
page=1
while : ; do
resp=$(curl -s -X POST https://api.hub.allbound.ia.br/core/v1/contact/filter \
-H "Authorization: Bearer pn_SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d "{\"pageNumber\": $page, \"pageSize\": 100}")
echo "$resp" | jq -r '.items[]'
[ "$(echo "$resp" | jq -r '.hasMorePages')" = "true" ] || break
page=$((page + 1))
donepageSize: 100 é o máximo e o que menos consome cota: percorrer 1.000 registros
custa 10 requisições em vez de 100. Ver Rate limiting.
