Sdílet prostřednictvím


Stránkování v after GraphQL

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.