Sdílet prostřednictvím


Stránkování s využitím $after REST

Stránkování zužuje velké datové sady na menší, spravovatelné stránky. Tvůrce rozhraní DATA API (DAB) v REST používá $after parametr dotazu pro stránkování sady klíčů a poskytuje stabilní a efektivní procházení přes seřazené výsledky. Každý token označuje pozici posledního záznamu z předchozí stránky, což umožňuje dalšímu požadavku pokračovat od tohoto bodu. Na rozdíl od stránkování posunu zabrání stránkování sady klíčů chybějícím nebo duplicitním řádkům, když se data mezi požadavky změní.

Přejděte do verze GraphQL tohoto dokumentu.

Rychlý přehled

Koncepce Description
$after Neprůsledný token pokračování vrácený z předchozího požadavku
$first Maximální počet záznamů, které se mají načíst na stránku
nextLink Adresa URL další stránky obsahuje $after

Základní stránkování

V tomto příkladu dostáváme první tři knihy.

požadavek HTTP

GET /api/books?$first=3

Koncepční SQL

SELECT TOP (3)
  id,
  sku_title AS title
FROM dbo.books
ORDER BY id ASC;

Ukázková odpověď

{
  "value": [
    { "id": 1, "title": "Dune" },
    { "id": 2, "title": "Foundation" },
    { "id": 3, "title": "Hyperion" }
  ],
  "nextLink": "/api/books?$first=3&$after=eyJpZCI6M30="
}

Poznámka:

Pokud next-link-relative=true je v konfiguraci, nextLink obsahuje relativní cestu, jinak se jedná o absolutní adresu URL.

Pokračování s $after

Parametr $after určuje token pokračování pro další stránku. Hodnota je řetězec s kódováním base64 představující poslední záznam předchozí stránky.

Výstraha

$after nese neprůhlený token, který identifikuje, kde poslední stránka skončila. Považovat tokeny za neměnné a nikdy se je nepokoušejte vytvářet ani upravovat.

V tomto příkladu dostáváme další tři knihy za tokenem poslední stránky.

požadavek HTTP

GET /api/books?$first=3&$after=eyJpZCI6M30=

Koncepční SQL

SELECT TOP (3)
  id,
  sku_title AS title
FROM dbo.books
WHERE id > 3
ORDER BY id ASC;

Ukázková odpověď

{
  "value": [
    { "id": 4, "title": "I, Robot" },
    { "id": 5, "title": "The Left Hand of Darkness" },
    { "id": 6, "title": "The Martian" }
  ],
  "nextLink": "/api/books?$first=3&$after=eyJpZCI6Nn0="
}

Konec dat

Pokud nextLink chybí, neexistují žádné další záznamy, které by bylo potřeba načíst. Poslední odpověď stránky obsahuje pouze value pole bez .nextLink

Ukázková odpověď

{
  "value": [
    { "id": 7, "title": "Rendezvous with Rama" },
    { "id": 8, "title": "The Dispossessed" }
  ]
}

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.