GraphQL'de ile after sayfalandırma

Sayfalandırma, büyük veri kümelerini daha küçük, yönetilebilir sayfalara daraltıyor. GraphQL'de Veri API'si oluşturucusu (DAB), anahtar kümesi sayfalaması için bağımsız değişkenini kullanarak after sıralı sonuçlar arasında kararlı ve verimli bir geçiş sağlar. Her imleç, önceki sayfadaki son kaydın konumunu kodlar ve sonraki sorgunun bu noktadan devam etmesi için izin verir. Uzaklık sayfalandırmasından farklı olarak, anahtar kümesi sayfalandırması istekler arasında veri değiştiğinde boşluklardan veya yinelemelerden kaçınıyor.

Bu belgenin REST sürümüne gidin.

Hızlı bakış

Konsept Description
after Önceki istekten devam belirteci
first Sayfa başına getirilecek en fazla kayıt sayısı
hasNextPage Daha fazla veri olup olmadığını gösterir
endCursor Sonraki after isteğe eklenecek belirteç

Temel sayfalandırma

GraphQL sorgusu

Bu örnekte ilk üç kitabı alıyoruz.

query {
  books(first: 3) {
    items {
      id
      title
    }
    hasNextPage
    endCursor
  }
}

Kavramsal SQL

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

Örnek yanıt

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune" },
        { "id": 2, "title": "Foundation" },
        { "id": 3, "title": "Hyperion" }
      ],
      "hasNextPage": true,
      "endCursor": "eyJpZCI6M30="
    }
  }
}

Ile devam etme after

bağımsız değişkeni, after sonraki sayfa için devamlılık belirtecini belirtir. Değer, önceki sayfadan son kaydı temsil eden base64 kodlu bir imleçtir.

Uyarı

bağımsız değişkeni, after önceki sayfanın sona erdiği yeri işaretleyen opak bir belirteç taşır. Belirteçleri sabit olarak kabul edin ve hiçbir zaman bunları oluşturma veya düzenlemeye çalışma.

Bu örnekte, son sayfanın imlecinden sonraki üç kitabı alıyoruz.

GraphQL sorgusu

query {
  books(first: 3, after: "eyJpZCI6M30=") {
    items {
      id
      title
    }
    hasNextPage
    endCursor
  }
}

Kavramsal SQL

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

Örnek yanıt

{
  "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="
    }
  }
}

İç içe sayfalandırma

Sayfalandırma, sayfalandırılmış kitap listesi olan yazarları alma gibi ilgili koleksiyonlara uygulanabilir.

GraphQL sorgusu

query {
  authors {
    items {
      id
      name
      books(first: 2) {
        items {
          id
          title
        }
        hasNextPage
        endCursor
      }
    }
  }
}

Kavramsal 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;

Uyarı

Herhangi bir şema veya sıralama değişikliği, daha önce verilen belirteçleri geçersiz kılır. İstemciler sayfalandırmayı ilk sayfadan yeniden başlatmalıdır.

Örnek yapılandırma

{
  "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" ]
        }
      }
    }
  }
}

Ayrıca bakınız

Konsept REST GraphQL Amaç
Projection $select items Döndürülecek alanları seçme
Filtering $filter filtre Satırları koşula göre kısıtlama
Sıralama $orderby orderBy Sıralama düzenini tanımlama
Sayfa Boyutu $first first Sayfa başına öğe sayısını sınırlama
Devam $after sonra İmleç kullanarak son sayfadan devam et

Uyarı

REST anahtar sözcükleri, OData kurallarını izleyerek ile $başlar.