Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Paginação com
A paginação restringe grandes conjuntos de dados a páginas menores e gerenciáveis. No GraphQL, o construtor de API de dados (DAB) usa o argumento para paginação do conjunto de chaves, fornecendo uma travessia after estável e eficiente através de resultados ordenados. Cada cursor codifica a posição do último registro na página anterior, permitindo que a próxima consulta continue a partir desse ponto. Ao contrário da paginação de deslocamento, a paginação do conjunto de chaves evita lacunas ou duplicações quando os dados são alterados entre as solicitações.
Vá para a versão REST deste documento.
Visão rápida
| Concept | Description |
|---|---|
after |
O token de continuação da solicitação anterior |
first |
O número máximo de registros a serem buscados por página |
hasNextPage |
Indica se existem mais dados |
endCursor |
O token a ser incluído na próxima after solicitação |
Paginação básica
Consulta GraphQL
Neste exemplo, temos os três primeiros livros.
query {
books(first: 3) {
items {
id
title
}
hasNextPage
endCursor
}
}
SQL conceitual
SELECT TOP (3)
id,
sku_title AS title
FROM dbo.books
ORDER BY id ASC;
Resposta da amostra
{
"data": {
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" },
{ "id": 3, "title": "Hyperion" }
],
"hasNextPage": true,
"endCursor": "eyJpZCI6M30="
}
}
}
Continuação com after
O after argumento especifica o token de continuação para a próxima página. O valor é um cursor codificado em base64 que representa o último registro da página anterior.
Advertência
O after argumento carrega um token opaco que marca onde a página anterior terminou. Trate os tokens como imutáveis e nunca tente construí-los ou editá-los.
Neste exemplo, estamos recebendo os próximos três livros após o cursor da última página.
Consulta GraphQL
query {
books(first: 3, after: "eyJpZCI6M30=") {
items {
id
title
}
hasNextPage
endCursor
}
}
SQL conceitual
SELECT TOP (3)
id,
sku_title AS title
FROM dbo.books
WHERE id > 3
ORDER BY id ASC;
Resposta da amostra
{
"data": {
"books": {
"items": [
{ "id": 4, "title": "I, Robot" },
{ "id": 5, "title": "The Left Hand of Darkness" },
{ "id": 6, "title": "The Martian" }
],
"hasNextPage": true,
"endCursor": "eyJpZCI6Nn0="
}
}
}
Paginação aninhada
A paginação pode ser aplicada a coleções relacionadas, como recuperar autores com uma lista paginada de livros.
Consulta GraphQL
query {
authors {
items {
id
name
books(first: 2) {
items {
id
title
}
hasNextPage
endCursor
}
}
}
}
SQL conceitual
-- parent
SELECT
id,
name
FROM dbo.authors;
-- child
SELECT TOP (2)
author_id,
id,
sku_title AS title
FROM dbo.books
WHERE author_id IN (@a1, @a2)
ORDER BY id ASC;
Observação
Qualquer alteração de esquema ou pedido invalida tokens emitidos anteriormente. Os clientes devem reiniciar a paginação a partir da primeira página.
Configuração de exemplo
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Consulte também
| Concept | REST | GraphQL | Propósito |
|---|---|---|---|
| Projection | $select | items | Escolha quais campos retornar |
| Filtering | $filter | filtrar | Restringir linhas por condição |
| Classificação | $orderby | orderBy | Definir a ordem de classificação |
| Tamanho da página | $first | first | Limitar o número de itens por página |
| Continuação | $after | após | Continue a partir da última página usando um cursor |
Observação
As palavras-chave REST começam com $, seguindo as convenções OData.