Bagikan melalui


Cara memanggil titik akhir GraphQL

Titik akhir GraphQL di Penyusun API Data (DAB) memungkinkan Anda mengkueri dan memodifikasi data dengan presisi. Setiap kueri mendeklarasikan dengan tepat bidang apa yang Anda butuhkan dan mendukung argumen untuk memfilter, mengurutkan, dan membuat halaman hasil.

Secara default, DAB menghosting titik akhir GraphQL-nya di:

https://{base_url}/graphql

Entitas yang diekspos melalui konfigurasi secara otomatis disertakan dalam skema GraphQL. Misalnya, jika Anda memiliki books entitas dan authors , keduanya muncul sebagai bidang akar dalam skema.

Nota

Untuk menjelajahi skema dan kolom pelengkapan otomatis, anda bisa menggunakan klien atau IDE GraphQL yang modern (seperti Apollo, Insomnia, atau ekstensi GraphQL untuk Visual Studio Code).

Kata kunci yang didukung di penyusun API Data

Konsep GraphQL Kegunaan
Proyeksi items Pilih bidang mana yang akan dikembalikan
Penyaringan saringan Membatasi baris menurut kondisi
Pengurutan orderBy Tentukan urutan pengurutan
Ukuran halaman pertama Batasi jumlah item per halaman
Kelanjutan sesudah Lanjutkan dari halaman terakhir

Struktur dasar

Setiap kueri GraphQL dimulai dengan bidang akar yang mewakili entitas. Semua permintaan GraphQL menggunakan POST ke endpoint /graphql dengan tubuh JSON yang berisi kueri.

{
  books {
    items {
      id
      title
      year
      pages
    }
  }
}

Responsnya adalah objek JSON dengan bentuk yang sama dengan set pilihan Anda. Penomoran halaman dan detail kesalahan hanya muncul saat diperlukan.

Nota

Secara default, DAB mengembalikan hingga 100 item per kueri kecuali dikonfigurasi sebaliknya (runtime.pagination.default-page-size).

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "{ books { items { id title year pages } } }"
}

Sukses:

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
        { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
      ]
    }
  }
}

Berhasil dengan paginasi:

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
        { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
      ],
      "hasNextPage": true,
      "endCursor": "eyJpZCI6Mn0="
    }
  }
}

Kesalahan:

{
  "errors": [
    {
      "message": "Could not find item with the given key.",
      "locations": [{ "line": 1, "column": 3 }],
      "path": ["book_by_pk"]
    }
  ]
}

Jenis kueri

Setiap entitas mendukung dua kueri akar standar:

Pertanyaan Deskripsi
entity_by_pk Mengembalikan satu rekaman dengan kunci utamanya
entities Mengembalikan daftar rekaman yang cocok dengan filter

Contoh mengembalikan satu rekaman:

{
  book_by_pk(id: 1010) {
    title
    year
  }
}

Contoh mengembalikan banyak:

{
  books {
    items {
      id
      title
    }
  }
}

Memfilter hasil

filter Gunakan argumen untuk membatasi rekaman mana yang dikembalikan.

{
  books(filter: { title: { contains: "Foundation" } }) {
    items { id title }
  }
}

Kueri ini mengembalikan semua buku yang judulnya berisi "Foundation."

Filter dapat menggabungkan perbandingan dengan operator logis:

{
  authors(filter: {
    or: [
      { first_name: { eq: "Isaac" } }
      { last_name: { eq: "Asimov" } }
    ]
  }) {
    items { first_name last_name }
  }
}

Lihat referensi argumen filter untuk operator yang didukung seperti eq, neq, lt, lte, dan isNull.

Mengurutkan hasil

Argumen orderBy menentukan bagaimana rekaman diurutkan.

{
  books(orderBy: { year: DESC, title: ASC }) {
    items { id title year }
  }
}

Ini mengembalikan buku yang diurutkan berdasarkan year menurun, lalu berdasarkan title.

Untuk informasi selengkapnya, lihat referensi argumen orderBy.

Membatasi hasil

Argumen first membatasi berapa banyak rekaman yang dikembalikan dalam satu permintaan.

{
  books(first: 5) {
    items { id title }
  }
}

Ini mengembalikan lima buku pertama, diurutkan berdasarkan kunci primer secara default. Anda juga dapat menggunakan first: -1 untuk meminta ukuran halaman maksimum yang dikonfigurasi.

Pelajari selengkapnya dalam referensi argumen pertama.

Melanjutkan hasil

Untuk mengambil halaman berikutnya, gunakan argumen after bersama kursor dari kueri sebelumnya.

{
  books(first: 5, after: "eyJpZCI6NX0=") {
    items { id title }
  }
}

Token after menandai tempat halaman sebelumnya berakhir. Untuk informasi selengkapnya, lihat referensi argumen setelah.

Pemilihan bidang (proyeksi)

Di GraphQL, Anda memilih dengan tepat bidang mana yang muncul dalam respons. Tidak ada wildcard seperti SELECT *. Minta hanya apa yang Anda butuhkan.

{
  books {
    items { id title price }
  }
}

Anda juga dapat menggunakan alias untuk mengganti nama bidang dalam respons:

{
  books {
    items {
      bookTitle: title
      cost: price
    }
  }
}

Lihat referensi proyeksi bidang untuk detailnya.

Memodifikasi data

Mutasi GraphQL memungkinkan Anda membuat, memperbarui, dan menghapus rekaman tergantung pada izin entitas.

Mutasi Action
createEntity Membuat item baru
updateEntity Memperbarui item yang sudah ada
deleteEntity Menghapus item

Nota

Akhiran _by_pk hanya berlaku untuk kueri (misalnya, book_by_pk). Nama mutasi tidak menyertakan akhiran ini—gunakan updateBook dan deleteBook, bukan updateBook_by_pk atau deleteBook_by_pk.

Penting

Mutasi GraphQL memerlukan kumpulan koneksi database aktif. Jika string koneksi Anda mengatur Pooling=False atau MultipleActiveResultSets=False, mutasi gagal dengan kesalahan Implicit distributed transactions have not been enabled. Atur Pooling=True dan MultipleActiveResultSets=True (SQL Server) atau yang setara untuk penyedia database Anda.

Petunjuk / Saran

Untuk prosedur tersimpan yang diekspos melalui GraphQL, DAB mengawali nama entitas dengan execute. Misalnya, entitas prosedur tersimpan bernama GetBookById menjadi executeGetBookById dalam skema. Untuk informasi selengkapnya, lihat prosedur tersimpan.

Membuat rekaman baru

create Gunakan mutasi untuk menambahkan item baru.

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "mutation { createBook(item: { id: 2000, title: \"Leviathan Wakes\", year: 2011, pages: 577 }) { id title year pages } }"
}

Perbarui data yang ada

update Gunakan mutasi untuk mengubah bidang tertentu pada item yang sudah ada.

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "mutation { updateBook(id: 2000, item: { title: \"Leviathan Wakes\", year: 2011, pages: 577 }) { id title year pages } }"
}

Hapus sebuah catatan

delete Gunakan mutasi untuk menghapus item menurut kunci primer.

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "mutation { deleteBook(id: 2000) { id title } }"
}