Paginação e Ordenação
Todos os endpoints de listagem (GET /recurso/) retornam dados paginados no formato:
| JSON |
|---|
| {
"count": 1500,
"next": "https://apis.pontotel.com.br/pontotel/api/v4/empregados/?page=2",
"previous": null,
"results": [
{ "id": 1, "nome": "João Silva" },
{ "id": 2, "nome": "Maria Santos" }
]
}
|
| Campo | Tipo | Descrição |
count | integer | Total de registros disponíveis (todas as páginas) |
next | string | null | URL da próxima página, null se for a última |
previous | string | null | URL da página anterior, null se for a primeira |
results | array | Registros da página atual |
Parâmetros de Paginação
| Parâmetro | Padrão | Máximo | Descrição |
page | 1 | - | Número da página |
page_size | 20 | 100 | Registros por página |
Exemplos
| HTTP |
|---|
| # Página 1 com 20 registros (padrão)
GET /empregados/
# Página 2 com 50 registros por página
GET /empregados/?page=2&page_size=50
# Máximo de registros por página
GET /empregados/?page_size=100
|
Iterando Todas as Páginas
Python
| Python |
|---|
| def listar_todos(url, headers):
todos = []
while url:
response = requests.get(url, headers=headers)
data = response.json()
todos.extend(data["results"])
url = data["next"] # None quando acabar
print(f"Carregados: {len(todos)}/{data['count']}")
return todos
# Uso
empregados = listar_todos(
"https://apis.pontotel.com.br/pontotel/api/v4/empregados/",
headers={"Authorization": f"Bearer {token}"}
)
|
JavaScript
| JavaScript |
|---|
| async function listarTodos(url, headers) {
const todos = [];
while (url) {
const response = await fetch(url, { headers });
const data = await response.json();
todos.push(...data.results);
url = data.next;
console.log(`Carregados: ${todos.length}/${data.count}`);
}
return todos;
}
|
Ordenação
Use o parâmetro ordering para ordenar resultados:
| HTTP |
|---|
| # Ordenar por nome (ascendente)
GET /empregados/?ordering=nome
# Ordenar por data de admissão (descendente, use -)
GET /empregados/?ordering=-data_admissao
# Múltiplos campos
GET /empregados/?ordering=empregador_id,-data_admissao
|
Campos Ordenáveis por Entidade
| Entidade | Campos Ordenáveis |
| Empregados | id, nome, cpf, matricula, data_admissao |
| Empregadores | id, razao_social, cnpj |
| Marcações | id, data_hora |
| Férias | id, data_inicio, data_fim |
Boas Práticas
Use page_size adequado
- Para sincronizações em bulk: use
page_size=100 - Para listagens interativas: use
page_size=20 ou page_size=50
Respeite o Rate Limit
Com 1500 empregados e page_size=100, você precisará de 15 requisições. Monitore o rate limit ao iterar muitas páginas.
Próximos Passos