Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penomoran halaman dengan
Penomoran halaman mempersempit himpunan data besar ke halaman yang lebih kecil dan dapat dikelola. Di GraphQL, Penyusun API Data (DAB) menggunakan after argumen untuk penomoran kunci, menyediakan traversal yang stabil dan efisien melalui hasil yang diurutkan. Setiap kursor mengodekan posisi rekaman terakhir di halaman sebelumnya, memungkinkan kueri berikutnya untuk melanjutkan dari titik tersebut. Tidak seperti penomoran halaman offset, paginasi set kunci menghindari kesenjangan atau duplikat saat data berubah antar permintaan.
Buka versi REST dokumen ini.
Sekilas
| Konsep | Description |
|---|---|
after |
Token kelanjutan dari permintaan sebelumnya |
first |
Jumlah maksimum rekaman yang diambil per halaman |
hasNextPage |
Menunjukkan apakah ada lebih banyak data |
endCursor |
Token yang akan disertakan dalam permintaan berikutnya after |
Penomoran halaman dasar
Kueri GraphQL
Dalam contoh ini kita mendapatkan tiga buku pertama.
query {
books(first: 3) {
items {
id
title
}
hasNextPage
endCursor
}
}
SQL Konseptual
SELECT TOP (3)
id,
sku_title AS title
FROM dbo.books
ORDER BY id ASC;
Contoh tanggapan
{
"data": {
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" },
{ "id": 3, "title": "Hyperion" }
],
"hasNextPage": true,
"endCursor": "eyJpZCI6M30="
}
}
}
Kelanjutan dengan after
Argumen after menentukan token kelanjutan untuk halaman berikutnya. Nilainya adalah kursor yang dikodekan base64 yang mewakili rekaman terakhir dari halaman sebelumnya.
Peringatan
Argumen after membawa token buram yang menandai tempat halaman sebelumnya berakhir. Perlakukan token sebagai tidak dapat diubah dan jangan pernah mencoba membangun atau mengeditnya.
Dalam contoh ini kita mendapatkan tiga buku berikutnya setelah kursor halaman terakhir.
Kueri GraphQL
query {
books(first: 3, after: "eyJpZCI6M30=") {
items {
id
title
}
hasNextPage
endCursor
}
}
SQL Konseptual
SELECT TOP (3)
id,
sku_title AS title
FROM dbo.books
WHERE id > 3
ORDER BY id ASC;
Contoh tanggapan
{
"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="
}
}
}
Penomoran halaman berlapis
Penomoran halaman dapat diterapkan ke koleksi terkait, seperti mengambil penulis dengan daftar buku halaman.
Kueri GraphQL
query {
authors {
items {
id
name
books(first: 2) {
items {
id
title
}
hasNextPage
endCursor
}
}
}
}
SQL Konseptual
-- 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;
Nota
Setiap skema atau perubahan urutan membatalkan token yang dikeluarkan sebelumnya. Klien harus memulai ulang penomoran halaman dari halaman pertama.
Konfigurasi contoh
{
"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" ]
}
}
}
}
}
Lihat juga
| Konsep | REST | GraphQL | Tujuan |
|---|---|---|---|
| Projection | $select | items | Pilih bidang mana yang akan dikembalikan |
| Penyaringan | $filter | saringan | Membatasi baris menurut kondisi |
| Pengurutan | $orderby | orderBy | Tentukan urutan pengurutan |
| Ukuran halaman | $first | first | Membatasi jumlah item per halaman |
| Kelanjutan | $after | sesudah | Lanjutkan dari halaman terakhir menggunakan kursor |
Nota
Kata kunci REST dimulai dengan $, mengikuti konvensi OData.