Menjelajahi kebijakan API Management
Di Azure API Management, kebijakan memungkinkan penerbit mengubah perilaku API melalui konfigurasi. Kebijakan adalah kumpulan Pernyataan yang dijalankan secara berurutan atas permintaan atau respons dari API.
Kebijakan diterapkan di dalam gateway yang berada di antara konsumen API dan API terkelola. Gateway menerima semua permintaan dan biasanya meneruskannya tanpa diubah ke API yang mendasarinya. Namun sebuah kebijakan dapat menerapkan perubahan pada permintaan masuk dan respons keluar. Ekspresi kebijakan dapat digunakan sebagai nilai atribut atau nilai teks dalam kebijakan API Management mana pun, kecuali jika kebijakan menentukan sebaliknya.
Memahami konfigurasi kebijakan
Definisi kebijakan adalah dokumen XML sederhana yang menjelaskan urutan pernyataan yang masuk dan keluar. XML dapat diedit secara langsung di jendela definisi.
Konfigurasi dibagi menjadi inbound
, backend
, outbound
,dan on-error
. Rangkaian pernyataan kebijakan yang ditentukan dijalankan untuk permintaan dan respons.
<policies>
<inbound>
<!-- statements to be applied to the request go here -->
</inbound>
<backend>
<!-- statements to be applied before the request is forwarded to
the backend service go here -->
</backend>
<outbound>
<!-- statements to be applied to the response go here -->
</outbound>
<on-error>
<!-- statements to be applied if there is an error condition go here -->
</on-error>
</policies>
Jika ada kesalahan selama pemrosesan permintaan, langkah-langkah yang tersisa di bagian , , backend
atau outbound
dilewati inbound
dan eksekusi melompat ke pernyataan di bagian .on-error
Dengan menempatkan pernyataan kebijakan di bagian on-error
, Anda dapat meninjau kesalahan dengan menggunakan properti context.LastError
, memeriksa dan mengkustomisasi respons kesalahan menggunakan kebijakan set-body
, dan mengonfigurasi apa yang terjadi jika terjadi kesalahan.
Ekspresi kebijakan
Kecuali jika kebijakan menentukan lain, ekspresi kebijakan dapat digunakan sebagai nilai atribut atau nilai teks di salah satu kebijakan API Management. Ekspresi kebijakan adalah:
- satu pernyataan C# yang terlampir dalam
@(expression)
, atau - blok kode C# multi-pernyataan, terlampir dalam
@{expression}
, yang mengembalikan nilai
Setiap ekspresi memiliki akses ke variabel context
yang disediakan secara implisit dan subset yang diizinkan dari jenis .NET Framework.
Ekspresi kebijakan menyediakan cara canggih untuk mengontrol lalu lintas dan memodifikasi perilaku API tanpa mengharuskan Anda menulis kode khusus atau memodifikasi layanan backend.
Contoh berikut menggunakan ekspresi kebijakan dan kebijakan set-header untuk menambahkan data pengguna ke permintaan masuk. Header yang ditambahkan termasuk ID pengguna yang terkait dengan kunci langganan dalam permintaan, dan wilayah yang merupakan tempat hosting gateway yang memproses permintaan.
<policies>
<inbound>
<base />
<set-header name="x-request-context-data" exists-action="override">
<value>@(context.User.Id)</value>
<value>@(context.Deployment.Region)</value>
</set-header>
</inbound>
</policies>
Menerapkan kebijakan yang ditentukan pada lingkup yang berbeda
Jika Anda memiliki kebijakan di tingkat global dan kebijakan yang dikonfigurasi untuk API, maka setiap kali API tertentu digunakan, kedua kebijakan tersebut diterapkan. API Management memungkinkan pemesanan deterministik dari pernyataan kebijakan gabungan melalui elemen dasar.
<policies>
<inbound>
<cross-domain />
<base />
<find-and-replace from="xyz" to="abc" />
</inbound>
</policies>
Dalam contoh definisi kebijakan sebelumnya, cross-domain
Pernyataan akan dijalankan terlebih dahulu. Kebijakan find-and-replace
akan dijalankan setelah kebijakan apa pun pada cakupan yang lebih luas.
Memfilter konten respons
Kebijakan yang ditentukan dalam contoh berikut menunjukkan cara memfilter elemen data dari payload respons berdasarkan produk yang terkait dengan permintaan.
Cuplikan mengasumsikan bahwa konten respons diformat sebagai JSON dan berisi properti tingkat akar bernama menit, per jam, harian, dan bendera.
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<!-- NOTE that we are not using preserveContent=true when deserializing response body stream into a JSON object since we don't intend to access it again. See details on /azure/api-management/api-management-transformation-policies#SetBody -->
<set-body>
@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"minutely", "hourly", "daily", "flags"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
</outbound>
<on-error>
<base />
</on-error>
</policies>