Paginación y ordenación
Todas las variables de lista (GET /recurso/) retornan datos paginados en formato:
| JSON |
|---|
| {
"itens": [
{ "id": "1d3fc7947bee78a5179720a", "nome": "jornada de trabalho 08h x 18h" },
{ "id": "2a4bc8058cff89b6280831b", "nome": "jornada de trabalho 09h x 18h" }
],
"total": 239,
"pagina": 0,
"por_pagina": 10,
"ordenacao": [],
"filtros": []
}
|
| Campo | Tipo | Descripción |
itens | array | Registros de la página actual |
total | Integer | Total de registros disponibles (todas las páginas) |
pagina | Integer | Índice de la página actual (comenza en 0) |
por_pagina | Integer | Cantidad de elementos retornados en esta página |
ordenacao | array | Criterios de ordenación aplicados en la consulta |
filtros | array | Filtros activos en la consulta |
Parámetros de paginación
| Parámetro | Patrón | Intervalo | Descripción |
pagina | 0 | ≥0 | Índice de página (comenza en cero) |
por-pagina | 10 | 1 – 1000 | Cantidad de registros por página |
Ejemplos
| HTTP |
|---|
| # Página 0 com 10 registros (padrão)
GET /jornadas/
# Segunda página (índice 1) com 50 registros
GET /jornadas/?pagina=1&por-pagina=50
# Máximo de registros por página
GET /jornadas/?por-pagina=1000
|
Iterando todas las páginas
Como la API usa paginación basada en índice, calcule el total de páginas a partir de los campos total y por_pagina.
Python
| Python |
|---|
| import requests
def listar_todos(url, headers):
todos = []
pagina = 0
por_pagina = 100
while True:
response = requests.get(
url,
headers=headers,
params={"pagina": pagina, "por-pagina": por_pagina}
)
response.raise_for_status()
data = response.json()
todos.extend(data["itens"])
print(f"Carregados: {len(todos)}/{data['total']}")
if len(todos) >= data["total"]:
break
pagina += 1
return todos
# Uso
jornadas = listar_todos(
"https://apis.pontotel.com.br/pontotel/api/v4/jornadas/",
headers={"Authorization": f"Bearer {token}"}
)
|
JavaScript
| JavaScript |
|---|
| async function listarTodos(url, headers) {
const todos = [];
let pagina = 0;
const porPagina = 100;
while (true) {
const params = new URLSearchParams({ pagina, 'por-pagina': porPagina });
const response = await fetch(`${url}?${params}`, { headers });
const data = await response.json();
todos.push(...data.itens);
console.log(`Carregados: ${todos.length}/${data.total}`);
if (todos.length >= data.total) break;
pagina++;
}
return todos;
}
|
Ordenación
Usá el parámetro ordenacao Para definir el orden de los resultados. El formato es campo para creciente y -campo Para atrás.
| HTTP |
|---|
| # Ordenar por nome (ascendente)
GET /jornadas/?ordenacao=nome
# Ordenar por data de criação (descendente)
GET /jornadas/?ordenacao=-criadoEm
# Múltiplos critérios
GET /jornadas/?ordenacao=nome&ordenacao=-criadoEm
|
Buenas prácticas
Elija un por-pagina adecuado
- Para sincronizaciones en bulk: use
por-pagina=1000 - Para un listado interactivo: use
por-pagina=10 o por-pagina=50
Respeite Rate Limit
Con 2.000 registros y por-pagina=100, necesitarás 20 requisiciones. Monitore el rate limit al iterar muchas páginas.
Próximos pasos