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.
Di GraphQL, bidang yang Anda minta menentukan dengan tepat apa yang dikembalikan oleh penyusun API Data (DAB), tidak lebih, tidak kurang. DAB mengkompilasi pilihan ini ke dalam SQL berparameter, termasuk hanya kolom yang dipetakan (terekspos) yang Anda minta dan kolom tambahan yang harus diambilnya secara internal. Ini mungkin termasuk kolom yang diperlukan untuk hubungan (kunci asing), kunci primer, atau pengurutan stabil yang digunakan dalam penomoran halaman dan konstruksi kursor.
Nota
GraphQL tidak memiliki wildcard seperti SELECT *. Klien harus menentukan setiap bidang secara eksplisit.
Buka versi REST dokumen ini.
Pilihan dasar
Mengkueri beberapa bidang yang dipetakan.
Kueri GraphQL
query {
books {
items {
id
title
price
}
}
}
SQL Konseptual
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Contoh tanggapan
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
Alias bidang
Alias mengganti nama bidang dalam respons, bukan di database. Lapisan SQL tidak alias untuk nama bidang GraphQL; aliasing terjadi setelah pengambilan data.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
SQL Konseptual
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Contoh tanggapan
Dengan alias:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
Pilihan berlapis
Hubungan yang ditentukan dalam konfigurasi memungkinkan kueri berlapis. SQL konseptual di bawah ini menunjukkan satu gabungan. Dalam praktiknya, DAB dapat menjalankan satu atau beberapa kueri berparameter (misalnya, kueri induk ditambah pengambilan anak batch) daripada satu gabungan yang diratakan.
Kueri GraphQL
query {
books {
items {
id
title
category {
id
name
}
}
}
}
SQL Konseptual
SELECT
b.id,
b.sku_title AS title,
c.id AS category_id,
c.name AS category_name
FROM dbo.books AS b
JOIN dbo.categories AS c
ON b.category_id = c.id;
Contoh tanggapan
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
Pilihan satu ke banyak
Anda juga dapat melintasi hubungan terbalik. Sekali lagi, SQL bersifat konseptual; eksekusi aktual dapat mendeduplikasi baris induk dan mewujudkan koleksi anak secara terpisah.
Kueri GraphQL
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
SQL Konseptual
SELECT
c.id,
c.name,
b.id AS book_id,
b.sku_title AS title
FROM dbo.categories AS c
JOIN dbo.books AS b
ON c.id = b.category_id;
Contoh tanggapan
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
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.