Alur kontrol
BERLAKU UNTUK: Semua tingkatAN API Management
choose
Gunakan kebijakan untuk menerapkan pernyataan kebijakan secara kondisional berdasarkan hasil evaluasi ekspresi Boolean. Gunakan kebijakan untuk alur kontrol yang mirip dengan konstruksi if-then-then atau switch dalam bahasa pemrograman.
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
<choose>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<otherwise>
<!— one or more policy statements to be applied if none of the above conditions are true -->
</otherwise>
</choose>
Kebijakan choose
harus berisi setidaknya satu <when/>
elemen. Elemen <otherwise/>
adalah opsional. Ketentuan di elemen <when/>
dievaluasi dalam urutan kemunculannya dalam kebijakan. Pernyataan kebijakan yang diapit dalam elemen <when/>
pertama dengan atribut kondisi sama dengan true
akan diterapkan. Kebijakan yang diapit dalam elemen <otherwise/>
, jika ada, akan diterapkan jika semua <when/>
atribut kondisi elemen adalah false
.
Elemen
Elemen | Deskripsi | Wajib diisi |
---|---|---|
when | Satu atau beberapa elemen yang menentukan if bagian atau ifelse dari choose kebijakan. Jika beberapa when elemen ditentukan, elemen tersebut dievaluasi secara berurutan. Setelah condition saat elemen mengevaluasi ke true , tidak ada lagi ketentuan when yang dievaluasi. |
Ya |
jika tidak | Cuplikan kebijakan yang akan dievaluasi jika tidak ada kondisi yang when dievaluasi ke true . |
No |
ketika atribut
Atribut | Deskripsi | Wajib diisi |
---|---|---|
kondisi | Ekspresi Boolean atau konstanta Boolean yang akan dievaluasi ketika pernyataan kebijakan yang berisi when dievaluasi. |
Ya |
Penggunaan
- Bagian kebijakan: masuk, keluar, backend, saat terjadi kesalahan
- Cakupan kebijakan: global, ruang kerja, produk, API, operasi
- Gateway: klasik, v2, konsumsi, dihost sendiri, ruang kerja
Contoh
Mengubah permintaan dan respons berdasarkan agen pengguna
Contoh berikut menunjukkan kebijakan variabel yang ditetapkan dan dua kebijakan alur kontrol.
Kebijakan variabel yang ditetapkan ada di bagian masuk dan membuat variabel isMobile
Boolean konteks yang ditetapkan ke benar jika User-Agent
header permintaan berisi teks iPad
atau iPhone
.
Kebijakan alur kontrol pertama juga ada di bagian masuk, dan menerapkan salah satu dari dua kebijakan Tetapkan parameter string kueri secara bersyarat, bergantung pada nilai isMobile
variabel konteks.
Kebijakan aliran kontrol kedua ada di bagian keluar dan menerapkan kebijakan Ubah XML ke JSON secara bersyarat jika isMobile
ditetapkan ke true
.
<policies>
<inbound>
<set-variable name="isMobile" value="@(context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPad") || context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPhone"))" />
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<set-query-parameter name="mobile" exists-action="override">
<value>true</value>
</set-query-parameter>
</when>
<otherwise>
<set-query-parameter name="mobile" exists-action="override">
<value>false</value>
</set-query-parameter>
</otherwise>
</choose>
</inbound>
<outbound>
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<xml-to-json kind="direct" apply="always" consider-accept-header="false"/>
</when>
</choose>
</outbound>
</policies>
Mengubah respons berdasarkan nama produk
Contoh ini menunjukkan cara melakukan pemfilteran konten dengan menghapus elemen data dari respons yang diterima dari layanan backend saat menggunakan produk Starter
. Contoh respons backend antara lain properti tingkat akar yang mirip dengan API Satu Panggilan OPENWeather.
<!-- Copy this snippet into the outbound section to remove a number of data elements from the response received from the backend service based on the name of the product -->
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<set-body>@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"current", "minutely", "hourly", "daily", "alerts"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
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