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
- Cakupan kebijakan: Pemecah masalah GraphQL
- Gateway: klasik, v2, konsumsi
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.
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 RegisteredCustomer
GuestCustomer
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>
Kebijakan terkait
Konten terkait
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
- Tutorial: Mengubah dan melindungi API Anda
- Referensi Kebijakan untuk daftar lengkap pernyataan kebijakan dan pengaturannya
- Ekspresi kebijakan
- Mengatur atau mengedit kebijakan
- Menggunakan kembali konfigurasi kebijakan
- Repositori cuplikan kebijakan
- Kebijakan penulis menggunakan Microsoft Copilot di Azure