Sumber data HTTP untuk pemecah masalah

BERLAKU UNTUK: Semua tingkatAN API Management

Kebijakan http-data-source resolver mengonfigurasi permintaan HTTP dan secara opsional respons HTTP untuk menyelesaikan data untuk jenis objek dan bidang dalam skema GraphQL. Skema harus diimpor ke API Management sebagai API GraphQL.

Catatan

Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.

Pernyataan kebijakan

<http-data-source> 
    <http-request>
        <get-authorization-context>...get-authorization-context policy configuration...</get-authorization-context>
        <set-backend-service>...set-backend-service policy configuration...</set-backend-service>
        <set-method>...set-method policy configuration...</set-method> 
        <set-url>URL</set-url>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
        <set-header>...set-header policy configuration...</set-header>
        <set-body>...set-body policy configuration...</set-body>
        <authentication-certificate>...authentication-certificate policy configuration...</authentication-certificate>  
    </http-request> 
    <backend>
        <forward-request>...forward-request policy configuration...</forward-request>
    <http-response>
        <set-body>...set-body policy configuration...</set-body>
        <xml-to-json>...xml-to-json policy configuration...</xml-to-json>
        <find-and-replace>...find-and-replace policy configuration...</find-and-replace>
        <publish-event>...publish-event policy configuration...</publish-event>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
    </http-response>
</http-data-source> 

Elemen

Nama Deskripsi Wajib diisi
permintaan http Menentukan URL dan kebijakan turunan untuk mengonfigurasi permintaan HTTP penyelesai. Ya
backend Secara opsional meneruskan permintaan HTTP resolver ke layanan backend, jika ditentukan. No
respons http Secara opsional menentukan kebijakan turunan untuk mengonfigurasi respons HTTP penyelesai. Jika tidak ditentukan, respons dikembalikan sebagai string mentah. No

elemen permintaan http

Catatan

Kecuali jika disebutkan, setiap elemen turunan dapat ditentukan paling banyak sekali. Tentukan elemen dalam urutan yang tercantum.

Elemen Deskripsi Wajib diisi
get-authorization-context Mendapatkan konteks otorisasi untuk permintaan HTTP penyelesai. No
set-backend-service Mengalihkan permintaan HTTP resolver ke backend yang ditentukan. No
include-fragment Menyisipkan fragmen kebijakan dalam definisi kebijakan. Jika ada beberapa fragmen, tambahkan elemen tambahan include-fragment . No
atur-metode Mengatur metode permintaan HTTP resolver. Ya
set-url Mengatur URL permintaan HTTP resolver. Ya
atur-judul Mengatur header dalam permintaan HTTP pemecah masalah. Jika ada beberapa header, tambahkan elemen tambahan header . No
set-body Mengatur isi dalam permintaan HTTP resolver. No
sertifikat autentikasi Mengautentikasi menggunakan sertifikat klien dalam permintaan HTTP penyelesai. No

elemen backend

Elemen Deskripsi Wajib diisi
permintaan penerusan Meneruskan permintaan HTTP resolver ke layanan backend yang dikonfigurasi. No

elemen respons http

Catatan

Kecuali jika disebutkan, setiap elemen turunan dapat ditentukan paling banyak sekali. Tentukan elemen dalam urutan yang tercantum.

Nama Deskripsi Wajib diisi
set-body Mengatur isi dalam respons HTTP resolver. No
xml-ke-json Mengubah respons HTTP penyelesai dari XML ke JSON. No
temukan-dan-ganti Menemukan substring dalam respons HTTP resolver dan menggantinya dengan substring yang berbeda. No
publish-event Menerbitkan peristiwa ke satu atau beberapa langganan yang ditentukan dalam skema API GraphQL. No
include-fragment Menyisipkan fragmen kebijakan dalam definisi kebijakan. Jika ada beberapa fragmen, tambahkan elemen tambahan include-fragment . No

Penggunaan

Catatan penggunaan

  • Untuk mengonfigurasi dan mengelola resolver dengan kebijakan ini, lihat Mengonfigurasi pemecah masalah GraphQL.
  • Kebijakan ini hanya dipanggil saat menyelesaikan satu bidang dalam jenis operasi GraphQL yang cocok dalam skema.
  • Kebijakan ini mendukung jenis serikat GraphQL.

Contoh

Penyelesai untuk kueri GraphQL

Contoh berikut menyelesaikan kueri dengan melakukan panggilan GET HTTP ke sumber data backend.

Contoh skema

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Contoh kebijakan

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/get/users</set-url>
    </http-request>
</http-data-source>

Penyelesai untuk kueri GraqhQL yang mengembalikan daftar, menggunakan templat liquid

Contoh berikut menggunakan templat liquid, didukung untuk digunakan dalam kebijakan set-body, untuk mengembalikan daftar dalam respons HTTP ke kueri. Ini juga mengganti nama bidang username dalam respons dari REST API menjadi name dalam respons GraphQL.

Contoh skema

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Contoh kebijakan

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/users</set-url>
    </http-request>
    <http-response>
        <set-body template="liquid">
            [
                {% JSONArrayFor elem in body %}
                    {
                        "name": "{{elem.username}}"
                    }
                {% endJSONArrayFor %}
            ]
        </set-body>
    </http-response>
</http-data-source>

Penyelesai untuk mutasi GraphQL

Contoh berikut menyelesaikan mutasi yang menyisipkan data dengan membuat permintaan POST ke sumber data HTTP. Ekspresi kebijakan dalam kebijakan set-body permintaan HTTP memodifikasi argumen name yang diteruskan dalam kueri GraphQL sebagai isinya. Badan yang dikirim akan terlihat seperti JSON berikut:

{
    "name": "the-provided-name"
}

Contoh skema

type Query {
    users: [User]
}

type Mutation {
    makeUser(name: String!): User
}

type User {
    id: String!
    name: String!
}

Contoh kebijakan

<http-data-source>
    <http-request>
        <set-method>POST</set-method>
        <set-url>https://data.contoso.com/user/create </set-url>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-body>@{
            var args = context.GraphQL.Arguments;  
            JObject jsonObject = new JObject();
            jsonObject.Add("name", args["name"])
            return jsonObject.ToString();
        }</set-body>
    </http-request>
</http-data-source>

Resolver untuk jenis union GraphQL

Contoh berikut menyelesaikan orderById kueri dengan melakukan panggilan HTTP GET ke sumber data backend dan mengembalikan objek JSON yang menyertakan ID dan jenis pelanggan. Jenis pelanggan adalah persatuan dan RegisteredCustomerGuestCustomer jenis.

Contoh skema

type Query {
  orderById(orderId: Int): Order
}

type Order {
  customerId: Int!
  orderId: Int!  
  customer: Customer
}

enum AccountType {
  Registered
  Guest
}

union Customer = RegisteredCustomer | GuestCustomer

type RegisteredCustomer {
  accountType: AccountType!
  customerId: Int!
  customerGuid: String!
  firstName: String!
  lastName: String!
  isActive: Boolean!
}

type GuestCustomer {
  accountType: AccountType!
  firstName: String!
  lastName: String!
}

Contoh kebijakan

Untuk contoh ini, kami meniru hasil pelanggan dari sumber eksternal, dan kode keras hasil yang diambil dalam set-body kebijakan. Bidang __typename ini digunakan untuk menentukan jenis pelanggan.

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/orders/</set-url>
    </http-request>
    <http-response>
        <set-body>{"customerId": 12345, "accountType": "Registered", "__typename": "RegisteredCustomer" }
        </set-body>
    </http-response>
</http-data-source>

Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat: