Ir para o conteúdo

Paginação

A maioria dos endpoints que retornam listas suportam paginação via parâmetros limit e offset.

Parâmetros

Parâmetro Tipo Padrão Descrição
limit integer varia Número máximo de resultados por página
offset integer 0 Número de registros a pular

Limites por endpoint

Endpoint Mínimo Máximo Padrão
GET /dags/{dag_id}/runs 1 100 20
GET /phases/{phase}/logs 1 500 50
GET /phases/{phase}/data 1 500 50
GET /phases/{phase}/errors 1 500 50

Estrutura de resposta paginada

Todos os endpoints paginados incluem estes campos:

{
  "items": [...],
  "total": 1500,
  "limit": 50,
  "offset": 0,
  "has_more": true
}
Campo Descrição
total Total de registros que correspondem aos filtros, independentemente da página atual
has_more true se existirem mais resultados a partir de offset + limit

Exemplo: percorrer todas as páginas

# Página 1
curl "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs?limit=50&offset=0" \
  -H "Authorization: Bearer <token>"

# Página 2
curl "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs?limit=50&offset=50" \
  -H "Authorization: Bearer <token>"
import requests

headers = {"Authorization": f"Bearer {token}"}
base_url = "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs"
all_logs = []
offset = 0
limit = 50

while True:
    response = requests.get(
        base_url,
        params={"limit": limit, "offset": offset},
        headers=headers,
    )
    data = response.json()
    all_logs.extend(data["items"])

    if not data["has_more"]:
        break
    offset += limit
const headers = { Authorization: `Bearer ${token}` };
const allLogs = [];
let offset = 0;
const limit = 50;

while (true) {
  const res = await fetch(
    `/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs?limit=${limit}&offset=${offset}`,
    { headers }
  );
  const data = await res.json();
  allLogs.push(...data.items);

  if (!data.has_more) break;
  offset += limit;
}

Alternativa: stream

Para obter todos os logs de uma fase sem gerenciar páginas, o endpoint GET /phases/{phase}/logs suporta streaming no formato NDJSON (JSON Lines). Envie o header Accept: application/x-ndjson na requisição.

Datasets grandes

O stream não aplica nenhum limite de resultados. Consuma-o de forma incremental para evitar problemas de memória.

curl "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs?level=ERROR" \
  -H "Authorization: Bearer <token>" \
  -H "Accept: application/x-ndjson" \
  | while IFS= read -r line; do
      echo "$line"
    done
import json, requests

with requests.get(
    "http://<host>:<port>/api/v1/dags/my-dag/runs/2026-05-01/run-id/phases/extract/logs",
    params={"level": "ERROR"},
    headers={
        "Authorization": f"Bearer {token}",
        "Accept": "application/x-ndjson",
    },
    stream=True,
) as r:
    for line in r.iter_lines():
        if line:
            log = json.loads(line)
            print(log)