Mengonfigurasi pemecah masalah GraphQL

BERLAKU UNTUK: Semua tingkatAN API Management

Konfigurasikan resolver untuk mengambil atau mengatur data untuk bidang GraphQL dalam jenis objek yang ditentukan dalam skema GraphQL. Skema harus diimpor ke API Management sebagai API GraphQL.

Saat ini, API Management mendukung resolver yang dapat mengakses sumber data berikut:

Hal-hal yang perlu diketahui

  • Resolver adalah sumber daya yang berisi definisi kebijakan yang hanya dipanggil saat jenis objek dan bidang yang cocok dalam skema dijalankan.
  • Setiap resolver menyelesaikan data untuk satu bidang. Untuk mengatasi data untuk beberapa bidang, konfigurasikan pemecah masalah terpisah untuk masing-masing bidang.
  • Kebijakan yang dilingkup resolver dievaluasi setelah setiap inbound dan backend kebijakan dalam alur eksekusi kebijakan. Mereka tidak mewarisi kebijakan dari cakupan lain. Untuk informasi selengkapnya, lihat Kebijakan di API Management.
  • Anda dapat mengonfigurasi kebijakan cakupan API untuk API GraphQL, terlepas dari kebijakan cakupan penyelesai. Misalnya, tambahkan kebijakan validate-graphql-request ke inbound cakupan untuk memvalidasi permintaan sebelum resolver dipanggil. Konfigurasikan kebijakan cakupan API pada tab kebijakan API untuk API.

Prasyarat

Membuat resolver

Langkah-langkah berikut membuat resolver menggunakan sumber data berbasis HTTP. Langkah-langkah umum mirip untuk pemecah masalah apa pun yang menggunakan sumber data yang didukung.

  1. Di Portal Microsoft Azure, navigasikan ke instans API Management Anda.

  2. Di menu sebelah kiri, pilih API lalu nama API GraphQL Anda.

  3. Pada tab Skema , tinjau skema untuk bidang dalam jenis objek tempat Anda ingin mengonfigurasi pemecah masalah.

    1. Pilih bidang, lalu di margin kiri, arahkan penunjuk.

    2. Pilih + Tambahkan Resolver.

      Cuplikan layar menambahkan resolver dari bidang dalam skema GraphQL di portal.

  4. Pada halaman Buat Resolver :

    1. Perbarui properti Nama jika Anda mau, secara opsional masukkan Deskripsi, dan konfirmasi atau perbarui pilihan Tipe dan Bidang.
    2. Pilih sumber Data penyelesai. Untuk contoh ini, pilih HTTP API.
  5. Di editor kebijakan Resolver, perbarui http-data-source kebijakan dengan elemen turunan untuk skenario Anda.

    1. Perbarui elemen yang diperlukan http-request dengan kebijakan untuk mengubah operasi GraphQL ke permintaan HTTP.

    2. Secara opsional tambahkan http-response elemen, dan tambahkan kebijakan turunan untuk mengubah respons HTTP pemecah masalah. http-response Jika elemen tidak ditentukan, respons dikembalikan sebagai string mentah.

    3. Pilih Buat.

      Cuplikan layar editor kebijakan resolver di portal.

    Pemecah masalah dilampirkan ke bidang dan muncul di tab Pemecah Masalah .

    Cuplikan layar daftar resolver untuk GraphQL API di portal.

Mengelola resolver

Mencantumkan dan mengelola resolver untuk API GraphQL pada tab Resolver API.

Cuplikan layar mengelola resolver untuk GraphQL API di portal.

Pada tab Pemecah Masalah :

  • Kolom Tertaut menunjukkan apakah resolver dikonfigurasi untuk bidang yang saat ini berada dalam skema GraphQL. Jika resolver tidak ditautkan, resolver tidak dapat dipanggil.

  • Di menu konteks (...) untuk pemecah masalah, temukan perintah untuk Mengkloning, Mengedit, atau Menghapus pemecah masalah. Kloning resolver yang tercantum untuk membuat resolver serupa dengan cepat yang menargetkan jenis dan bidang yang berbeda.

  • Anda dapat membuat resolver baru dengan memilih + Buat.

Mengedit dan menguji resolver

Saat Anda mengedit pemecah masalah tunggal, halaman Edit pemecah masalah terbuka. Anda dapat:

  • Perbarui kebijakan resolver dan secara opsional sumber data. Mengubah sumber data menimpa kebijakan resolver saat ini.

  • Ubah jenis dan bidang yang ditargetkan pemecah masalah.

  • Uji dan debug konfigurasi resolver. Saat Anda mengedit kebijakan resolver, pilih Jalankan Uji untuk memeriksa output dari sumber data, yang dapat Anda validasi terhadap skema. Jika terjadi kesalahan, respons menyertakan informasi pemecahan masalah.

    Cuplikan layar pengeditan resolver di portal.

Konteks GraphQL

  • Konteks untuk permintaan dan respons penyelesai (jika ditentukan) berbeda dari konteks untuk permintaan API gateway asli:
    • context.GraphQL properti diatur ke argumen (Arguments) dan objek induk (Parent) untuk eksekusi resolver saat ini.
    • Konteks permintaan berisi argumen yang diteruskan dalam kueri GraphQL sebagai isinya.
    • Konteks respons adalah respons dari panggilan independen yang dilakukan oleh resolver, bukan konteks untuk respons lengkap untuk permintaan gateway. Variabel context yang diteruskan melalui alur permintaan dan respons ditambah dengan konteks GraphQL saat digunakan dengan pemecah masalah GraphQL.

Konteks. GraphQL.parent

context.GraphQL.parent diatur ke objek induk untuk eksekusi penyelesai saat ini. Pertimbangkan skema parsial berikut:

type Comment {
    id: ID!
    owner: string!
    content: string!
}

type Blog {
    id: ID!
    title: string!
    content: string!
    comments: [Comment]!
    comment(id: ID!): Comment
}

type Query {
    getBlog(): [Blog]!
    getBlog(id: ID!): Blog
}

Selain itu, pertimbangkan kueri GraphQL untuk semua informasi untuk blog tertentu:

query {
    getBlog(id: 1) {
        title
        content
        comments {
            id
            owner
            content
        }
    }
}

Jika Anda mengatur pemecah masalah untuk comments bidang dalam jenis , Blog Anda mungkin ingin memahami ID blog mana yang akan digunakan. Anda bisa mendapatkan ID blog menggunakan context.GraphQL.Parent["id"] seperti yang ditunjukkan di pemecah masalah berikut:

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>@($"https://data.contoso.com/api/blog/{context.GraphQL.Parent["id"]}")
        </set-url>
    </http-request>
</http-data-source>

Konteks. GraphQL.Arguments

Argumen untuk kueri GraphQL berparameter ditambahkan ke context.GraphQL.Arguments. Misalnya, pertimbangkan dua kueri berikut:

query($id: Int) {
    getComment(id: $id) {
        content
    }
}

query {
    getComment(id: 2) {
        content
    }
}

Kueri ini merupakan dua cara untuk memanggil penyelesai getComment. GraphQL mengirimkan payload JSON berikut:

{
    "query": "query($id: Int) { getComment(id: $id) { content } }",
    "variables": { "id": 2 }
}

{
    "query": "query { getComment(id: 2) { content } }"
}

Anda dapat menentukan penyelesai sebagai berikut:

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>@($"https://data.contoso.com/api/comment/{context.GraphQL.Arguments["id"]}")</set-url>
    </http-request>
</http-data-source>

Langkah berikutnya

Untuk contoh pemecah masalah lainnya, lihat: