تدفق التحكم

ينطبق على: جميع مستويات إدارة واجهة برمجة التطبيقات

استخدم النهج choose لتطبيق عبارات النهج بشكل مشروط استنادا إلى نتائج تقييم التعبيرات المنطقية. استخدم النهج لتدفق التحكم المشابه ل if-then-else أو إنشاء مفتاح في لغة برمجة.

إشعار

تعيين عناصر النهج والعناصر التابعة بالترتيب الوارد في بيان النهج. تعلم كيفية إعداد نُهج APIM أو تعديلها.

نهج السياسة

<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>

يجب أن يحتوي النهج choose على عنصر واحد <when/> على الأقل. <otherwise/>العنصر اختياري. يتم تقييم الظروف في العناصر <when/> من حيث مظهرها ضمن النَهج. سيتم تطبيق بيان (عبارات) النهج المغلق داخل عنصر <when/> الأول مع سمة الشرط يساوي true. سيتم تطبيق النهج المضمنة في عنصر <otherwise/>، إن وجدت، إذا كانت جميع <when/> سمات شرط العنصر هي false.

عناصر

العنصر الوصف مطلوب
عند عنصر واحد أو أكثر يحدد أو ififelse أجزاء من النهج choose . إذا تم تحديد عناصر متعددة when ، يتم تقييمها بشكل تسلسلي. بمجرد condition تقييم عنصر عند true، لا when يتم تقييم أي شروط أخرى. ‏‏نعم‬
خلاف ذلك قصاصة النهج المراد تقييمها إذا لم يتم تقييم أي من when الشروط إلى true. لا

عندما تكون السمات

السمة ‏‏الوصف مطلوب
condition التعبير المنطقي أو الثابت المنطقي الذي سيتم تقييمه عند تقييم عبارة النهج التي when تحتوي عليها. ‏‏نعم‬

الاستخدام

  • أقسام النهج: واردة وصادرة وخلفية وعند الخطأ
  • نطاقات النهج: العمومية، ومساحة العمل، والمنتج، وواجهة برمجة التطبيقات، والتشغيل
  • البوابات: الكلاسيكية، الإصدار 2، الاستهلاك، المستضافة ذاتيا

الأمثلة

تعديل الطلب والاستجابة استنادا إلى عامل المستخدم

يوضح المثال التالي نهج متغير مجموعة واثنين من نهج تدفق عنصر التحكم.

يوجد نهج المتغير المحدد في القسم الوارد ويقوم بإنشاء متغير isMobile سياق منطقي يتم تعيينه على "صحيح" إذا كان User-Agent عنوان الطلب يحتوي على النص iPad أو iPhone.

يوجد نهج تدفق عنصر التحكم الأولى أيضاً في القسم الوارد، وتطبق شرطياً أحد نهجي تعيين معلمة سلسلة الاستعلام بناءً على قيمة متغير السياق isMobile.

يوجد نهج تدفق عناصر التحكم الثانية في القسم الصادر ويطبق نهج تحويل XML إلى JSON بشكل مشروط عند تعيين isMobile على 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>

تعديل الاستجابة استنادا إلى اسم المنتج

يوضح هذا المثال كيفية إجراء عامل التصفية المحتوى عن طريق إزالة عناصر البيانات من الاستجابة المتلقاة من خدمة في الخلفية عند استخدام منتج Starter. يتضمن مثال استجابة الواجهة الخلفية خصائص على مستوى الجذر مشابهة لواجهة برمجة تطبيقات مكالمة النظام الأساسي لـ OpenWeather One Call.

<!-- 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>

لمزيد من المعلومات حول العمل مع النُهج، راجع: