Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Stránkování v
Stránkování zužuje velké datové sady na menší, spravovatelné stránky. V GraphQL používá after tvůrce rozhraní DATA API (DAB) argument pro stránkování sady klíčů, který poskytuje stabilní a efektivní procházení přes seřazené výsledky. Každý kurzor zakóduje pozici posledního záznamu na předchozí stránce, což umožňuje dalšímu dotazu pokračovat od tohoto bodu. Na rozdíl od stránkování posunu se stránkování sady klíčů vyhne mezerám nebo duplicitám, když se data mezi požadavky změní.
Přejděte do verze REST tohoto dokumentu.
Rychlý přehled
| Koncepce | Description |
|---|---|
after |
Token pro pokračování z předchozího požadavku |
first |
Maximální počet záznamů, které se mají načíst na stránku |
hasNextPage |
Určuje, jestli existuje více dat. |
endCursor |
Token, který se má zahrnout do dalšího after požadavku |
Základní stránkování
Dotaz GraphQL
V tomto příkladu dostáváme první tři knihy.
query {
books(first: 3) {
items {
id
title
}
hasNextPage
endCursor
}
}
Koncepční SQL
SELECT TOP (3)
id,
sku_title AS title
FROM dbo.books
ORDER BY id ASC;
Ukázková odpověď
{
"data": {
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" },
{ "id": 3, "title": "Hyperion" }
],
"hasNextPage": true,
"endCursor": "eyJpZCI6M30="
}
}
}
Pokračování s after
Argument after určuje token pokračování pro další stránku. Hodnota je kurzor s kódováním base64 představující poslední záznam z předchozí stránky.
Výstraha
Argument after nese neprůhlený token, který označuje, kde předchozí stránka skončila. Považovat tokeny za neměnné a nikdy se nepokoušejte o jejich vytvoření nebo úpravu.
V tomto příkladu dostáváme další tři knihy za kurzorem poslední stránky.
Dotaz GraphQL
query {
books(first: 3, after: "eyJpZCI6M30=") {
items {
id
title
}
hasNextPage
endCursor
}
}
Koncepční SQL
SELECT TOP (3)
id,
sku_title AS title
FROM dbo.books
WHERE id > 3
ORDER BY id ASC;
Ukázková odpověď
{
"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="
}
}
}
Vnořené stránkování
Stránkování lze použít u souvisejících kolekcí, například načítání autorů se stránkovaným seznamem knih.
Dotaz GraphQL
query {
authors {
items {
id
name
books(first: 2) {
items {
id
title
}
hasNextPage
endCursor
}
}
}
}
Koncepční SQL
-- 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;
Poznámka:
Jakékoli změny schématu nebo řazení zneplatní dříve vydané tokeny. Klienti musí restartovat stránkování z první stránky.
Příklad konfigurace
{
"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" ]
}
}
}
}
}
Viz také
| Koncepce | REST | GraphQL | Účel |
|---|---|---|---|
| Projection | $select | items | Výběr polí, která se mají vrátit |
| Filtering | $filter | filtr | Omezení řádků podle podmínky |
| Řazení | $orderby | orderBy | Definování pořadí řazení |
| Velikost stránky | $first | first | Omezení počtu položek na stránku |
| Pokračování | $after | po | Pokračovat z poslední stránky pomocí kurzoru |
Poznámka:
Klíčová slova REST začínají následujícími konvencemi $OData.