🚧 Em Construção 🚧
Pular para o conteúdo principal

Paginação

Esta especificação define um padrão unificado de paginação para todos os endpoints de APIs RESTful da Guardia que retornam listas de recursos. O objetivo é garantir consistência entre interfaces, previsibilidade no consumo de dados e interoperabilidade entre sistemas internos e externos.

Padronizar a paginação evita sobrecargas sistêmicas, melhora o tempo de resposta e reduz o uso de recursos computacionais. Está alinhada aos princípios de Compliance by Design, como:

  • Eficiência: por meio de mecanismos de paginação eficientes, com minimização de dados, evitando retornos excessivos.
  • Transparência e auditabilidade: proporcionando respostas estruturadas e rastreáveis.
  • Previsibilidade: permitindo que os consumidores prevejam o comportamento e o resultado das operações de paginação.

Suporta integrações eficientes com ferramentas externas e promove reutilização de componentes internos.

Requisição

Os sistemas da Guardia DEVEM oferecer os seguintes mecanismos de paginação:

ParâmetroTipoPadrãoMáximo
page_sizeuint3220100
page_tokenstring--
order_bystringcreated_at-
sortstringasc-

Parâmetros de paginação

Os sistemas que expõem recursos pagináveis DEVEM implementar os seguintes parâmetros de controle de paginação. Esses parâmetros DEVEM ser aceitos via query string em endpoints compatíveis com paginação.

page_size

  • DEVE ser um número inteiro representando a quantidade de itens por página.
  • QUANDO não especificado, DEVE assumir o valor padrão de 20.
  • NÃO DEVE exceder o valor máximo de 100.
  • Solicitações com valores acima do limite DEVEM ser rejeitadas com erro de validação.

page_token

  • DEVE ser um token opaco que represente a posição corrente da paginação.
  • DEVE ser retornado pelo sistema em chamadas anteriores, quando aplicável.
  • O formato e semântica do token são de responsabilidade do sistema e DEVEM ser tratados como opacos pelo cliente.

order_by

  • DEVE ser uma string indicando o modo de ordenação dos resultados.
  • QUANDO não informado, DEVE assumir o valor padrão created_at.
  • VALORES permitidos incluem created_at, updated_at e reference_date.
  • QUALQUER outro valor informado DEVE ser rejeitado com erro de validação.

sort

  • DEVE ser uma string indicando a direção da ordenação.
  • VALORES permitidos são asc (ordem crescente) e desc (ordem decrescente).
  • QUANDO não informado, DEVE assumir asc.

Resposta

A resposta DEVE conter os seguintes propriedades:

PropriedadeTipo
dataarray
paginationobject
pagination.page_sizeuint32
pagination.total_countuint32
pagination.first_page_tokenstring
pagination.previous_page_tokenstring
pagination.next_page_tokenstring
pagination.last_page_tokenstring

Estrutura do Payload

As respostas de endpoints que implementam paginação DEVEM seguir a estrutura abaixo. O objeto pagination DEVE conter os metadados necessários para navegação entre páginas de forma segura, eficiente e independente de estado no servidor.

data

  • DEVE ser um array contendo os itens da página atual.
  • CADA item DEVE seguir a estrutura de recurso definida para o endpoint consultado.

pagination

  • DEVE ser um objeto contendo os metadados de paginação.
  • Todas as propriedades de pagination DEVEM estar presentes, ainda que nulas quando não aplicáveis.
pagination.page_size
  • DEVE ser um inteiro positivo (uint32) representando o número de itens por página na resposta.
pagination.total_count
  • DEVE ser um inteiro positivo (uint32) representando o número total de registros disponíveis na consulta original.
  • PODE ser omitido em cenários de paginação altamente escaláveis onde a contagem completa afete a performance.
pagination.first_page_token
  • PODE ser uma string representando o token da primeira página.
  • DEVE ser tratado como um recurso auxiliar para clientes que desejem reiniciar a navegação.
pagination.previous_page_token
  • PODE ser uma string representando o token da página anterior.
  • QUANDO ausente ou nulo, indica que esta é a primeira página da sequência.
pagination.next_page_token
  • PODE ser uma string representando o token da próxima página.
  • QUANDO ausente ou nulo, indica que não há mais páginas seguintes.
pagination.last_page_token
  • PODE ser uma string representando o token da última página.
  • DEVE ser utilizado opcionalmente por clientes para saltar ao final da sequência.

Exemplo em JSON

{
"data": [
{ "id": "abc", "name": "Item A" },
{ "id": "def", "name": "Item B" }
],
"pagination": {
"page_size": 20,
"total_count": 200,
"first_page_token": "eyJhbGciOi...",
"previous_page_token": "eyJhbGciOi...",
"next_page_token": "eyJhbGciOi...",
"last_page_token": "eyJhbGciOi..."
}
}

Para mais detalhes sobre convenções gerais de resposta, consulte a especificação de Payloads de Resposta.

Headers

HeaderTipoValor
Cache-Controlstringmax-age=900
Linkstring-

Exemplo:

link:
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={first_page_token}>; rel="first",
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={previous_page_token}>; rel="previous",
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={next_page_token}>; rel="next",
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={last_page_token}>; rel="last"

Saiba mais sobre os headers HTTP que a Guardia utiliza aqui.

Comportamentos Esperados

Paginação

  • Filtros e paginação DEVEM ser combináveis.
  • Se page_token não for informado, a API DEVE retornar a primeira página de resultados, respeitando a ordenação padrão e page_size = 20.
  • Endpoints que retornam com paginação DEVEM garantir suporte a paginação reversa, com previous_page_token e first_page_token.
  • A ordenação dos itens DEVE ser estável e determinística.

Tokens de Página

  • page_token DEVE expirar de forma segura ou ser validado por tempo de uso.
  • O tempo de vida do page_token DEVE ser compatível com tempo de cache do header Cache-Control da resposta.
  • As propriedades first_page_token e last_page_token DEVEM ser retornadas sempre que tecnicamente possível, mas PODEM ser omitidas para otimização de payload ou performance.
  • As propriedades previous_page_token, next_page_token, first_page_token e last_page_token SÃO EXCLUSIVAS de resposta e NÃO DEVEM ser utilizadas como entrada.

Resposta

  • Se não houver resultados, a API DEVE retornar 200 OK com lista vazia e pagination.total_count = 0.
  • Se haver parâmetros de paginação inválidos, a API DEVE resultar em 400 Bad Request com o código ERR400_INVALID_PARAMETER e o respectivo motivo de erro.
  • A resposta DEVE conter corpo conforme a especificação de response payloads da Guardia tanto para sucesso quanto para erro.

Segurança, Expiração e Conformidade

  • Todos as propriedades *_page_token DEVEM ser tokens opacos (criptografados ou assinados), sem conter qualquer estrutura legível ou decodificável pelo cliente.
  • Tokens de paginação DEVEM expirar em tempo razoável (ex: 10 minutos) para evitar uso indevido.
  • Toda requisição DEVE ser registrada em log com X-Grd-Trace-Id.
  • A implementação DEVE respeitar escopos de autorização do cliente.

Erros Conhecidos

CenárioCódigo HTTPCódigoMotivo
page_token inválido400ERR400_INVALID_PARAMETERPAGE_TOKEN_INVALID
page_token expirado400ERR400_INVALID_PARAMETERPAGE_TOKEN_EXPIRED
page_size inválido400ERR400_INVALID_PARAMETERPAGE_SIZE_INVALID
page_size acima do limite400ERR400_INVALID_PARAMETERPAGE_SIZE_TOO_LARGE
order_by inválido400ERR400_INVALID_PARAMETERORDER_BY_INVALID
sort inválido400ERR400_INVALID_PARAMETERSORT_INVALID

Exemplo de erro (JSON)

{
"errors": [
{
"code": "ERR400_INVALID_PARAMETER",
"reason": "PAGE_TOKEN_INVALID",
"message": "The page token provided has an incorrect format. Please check the token before trying again."
}
]
}

Quando usar

  • Esta especificação DEVE ser aplicada a qualquer API REST que retorne listas de recursos.
  • Mesmo quando a API retorna uma lista de recursos com apenas um item, a especificação DEVE ser aplicada.
  • APIs e contratos existentes DEVEM ser adaptados de forma progressiva conforme evolução de versão ou migração.

Notas adicionais

  • A paginação DEVE ser documentada no contrato OAS da API.
  • A paginação aqui descrita é considerada padrão mínimo para qualquer API RESTful da Guardia.

Referências