> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rwsintegration.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Paginação

> Aprenda como identificar o melhor tipo de paginação de API para sua integração

## Visão geral

A RWS suporta os principais métodos de paginação de APIs, como simples, por offset, por cursor e por último ID, permitindo extrair grandes volumes de dados de forma eficiente.

## Tipos de paginação suportados pela RWS

<CardGroup cols={2}>
  <Card title="Paginação Simples" icon="list-ol" href="#paginação-simples">
    Baseada em número de página e tamanho de página
  </Card>

  <Card title="Paginação por Offset" icon="sort-numeric-up" href="#paginação-por-offset">
    Usa parâmetros offset e limit
  </Card>

  <Card title="Paginação por Cursor" icon="location-arrow" href="#paginação-por-cursor">
    Paginação baseada em token
  </Card>

  <Card title="Paginação por Último ID" icon="hashtag" href="#paginação-por-last-id">
    Usa o ID do último registro para próxima página
  </Card>
</CardGroup>

## Paginação Simples

A paginação simples usa parâmetros de número de página e tamanho de página para buscar dados em blocos. É o tipo de paginação mais comum.

### Como identificar

Sua API usa paginação simples se:

* Parâmetros de query incluem `page`, `page_number`, `pageNo`, ou similares
* A API aceita tanto número de página quanto tamanho de página juntos
* Exemplos de URLs: `?page=1&limit=10`, `?page_number=2&page_size=50`

### Como funciona

A API espera dois parâmetros:

* **Número de página**: Qual página recuperar (geralmente começa em 1 ou 0)
* **Tamanho de página**: Quantos registros por página

Incremente o número de página para cada requisição subsequente. A API retorna páginas até que não haja mais dados disponíveis.

| Requisição | Parâmetro                    | Página retornada             |
| ---------- | ---------------------------- | ---------------------------- |
| Primeira   | `GET /items?page=1&limit=10` | Página 1                     |
| Segunda    | `GET /items?page=2&limit=10` | Página 2                     |
| Terceira   | `GET /items?page=3&limit=10` | Página 3 (ou sem mais dados) |

## Paginação por Offset

A paginação por offset usa um offset (posição inicial) e limit (número de registros) para recuperar dados.

### Como identificar

Sua API usa paginação por offset se:

* Parâmetros de query incluem `offset`, `skip`, `start`, ou similares
* A API usa offset combinado com limit para controlar paginação
* Exemplos de URLs: `?offset=0&limit=10`, `?skip=20&take=50`

### Como funciona

A API espera:

* **Offset**: O número de registros a pular antes de começar a retornar resultados
* **Limit**: O número máximo de registros a retornar

Aumente o offset pela quantidade do limit para cada página subsequente. Por exemplo, com limit=10: primeira página usa offset=0, segunda usa offset=10, terceira usa offset=20.

| Requisição | Parâmetro                       | Offset retornado              |
| ---------- | ------------------------------- | ----------------------------- |
| Primeira   | `GET /items?offset=0&limit=10`  | offset=0                      |
| Segunda    | `GET /items?offset=10&limit=10` | offset=10                     |
| Terceira   | `GET /items?offset=20&limit=10` | offset=20 (ou sem mais dados) |

## Paginação por Cursor

A paginação por cursor usa um token ou valor de cursor para marcar a posição no conjunto de dados.

### Como identificar

Sua API usa paginação por cursor se:

* A resposta da API inclui um cursor, token ou campo "next" apontando para a próxima página
* A resposta inclui campos como `nextCursor`, `pageToken`, `next`, `cursor`, ou `pagination.next`
* Você precisa passar um token da resposta anterior para obter a próxima página
* Exemplo: Resposta contém `{"data": [...], "pagination": {"nextCursor": "abc123"}}`

### Como funciona

A API fornece um cursor ou token na resposta que aponta para a próxima página. O cursor pode ser um token (valor string) ou uma URL apontando para a próxima página. Extraia o cursor da resposta atual e inclua-o na sua próxima requisição. A API usa esse cursor para determinar quais registros retornar a seguir.

Cada resposta contém um token que aponta para a próxima página. Use esse token como parâmetro na requisição seguinte.

| Requisição | Parâmetro                           | Cursor da resposta       |
| ---------- | ----------------------------------- | ------------------------ |
| Primeira   | `GET /items?limit=10`               | `"nextCursor": "abc123"` |
| Segunda    | `GET /items?limit=10&cursor=abc123` | `"nextCursor": "xyz789"` |
| Terceira   | `GET /items?limit=10&cursor=xyz789` | `"nextCursor": null`     |

A paginação termina quando o cursor retornado for null ou estiver ausente.

## Paginação por last ID

A paginação por last ID usa o ID do último registro da página atual para buscar a próxima página.

### Como identificar

Sua API usa paginação por last ID se:

* Parâmetros de query incluem `after`, `since_id`, `last_id`, ou similares
* A API requer passar o ID do último registro da página anterior
* Registros são ordenados por ID e você busca registros com IDs maiores que um valor dado
* Exemplos de URLs: `?after=12345&limit=10`, `?since_id=67890&per_page=50`

### Como funciona

Extrai o ID do último registro da página atual e usa-o como parâmetro para buscar a próxima página. A API retorna registros com IDs maiores que o valor de ID fornecido. Essa abordagem evita perder registros mesmo se novos dados forem adicionados durante a paginação, já que você sempre busca registros após um ID específico.

| Requisição | Parâmetro                       | Último ID retornado                |
| ---------- | ------------------------------- | ---------------------------------- |
| Primeira   | `GET /items?limit=10`           | `lastId: 100`                      |
| Segunda    | `GET /items?limit=10&after=100` | `lastId: 200`                      |
| Terceira   | `GET /items?limit=10&after=200` | `lastId: null` (ou sem mais dados) |

A paginação termina quando não houver mais registros com ID maior que o último ID fornecido.

## Path para o datapoint na resposta

O campo **Path para o datapoint na resposta** indica ao RWS onde os registros estão dentro do corpo da resposta de cada página.

* `root`: o próprio corpo da resposta é o registro (ou o array de registros)
* Um caminho em notação de pontos (ex.: `data.items` quando a resposta tem o formato `{"data": {"items": [...]}}`)

Os guias desta documentação usam `root` porque o JSONPlaceholder retorna os registros diretamente no corpo da resposta.

## Fim de paginação

O campo **Tipo de fim de paginação** define como o RWS detecta a última página:

| Tipo de fim | Comportamento                                                                                                                                                                                    |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Objeto      | A paginação termina quando uma página não contém mais registros no path do datapoint (uma página vazia)                                                                                          |
| Status      | A paginação termina quando a origem responde com um status HTTP específico, configurado junto com o tipo de fim. Esse status é tratado como um marcador normal de fim de dados, não como um erro |

### Proteção contra página repetida

Se uma origem ignora seu parâmetro de paginação e retorna exatamente a mesma página duas vezes seguidas, o RWS interrompe a extração com um erro descritivo em vez de entrar em loop. Se você vir esse erro, verifique se a API de origem realmente respeita o parâmetro de página ou offset configurado.
