Bagikan melalui


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

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>

Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat: