Przepływ sterowania

DOTYCZY: Wszystkie warstwy usługi API Management

choose Użyj zasad, aby warunkowo stosować instrukcje zasad na podstawie wyników oceny wyrażeń logicznych. Użyj zasad dla przepływu sterowania podobnego do konstrukcji if-then-else lub przełącznika w języku programowania.

Uwaga

Ustaw elementy zasad i elementy podrzędne w kolejności podanej w instrukcji zasad. Dowiedz się więcej na temat ustawiania lub edytowania zasad usługi API Management.

Instrukcja zasad

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

Zasady choose muszą zawierać co najmniej jeden <when/> element. Element <otherwise/> jest opcjonalny. Warunki w <when/> elementach są oceniane w kolejności ich wyglądu w ramach zasad. Zostaną zastosowane instrukcje zasad ujęte w pierwszym <when/> elemecie z atrybutem warunku równe true . Zasady ujęte w elemercie <otherwise/> , jeśli są obecne, zostaną zastosowane, jeśli wszystkie <when/> atrybuty warunku elementu to false.

Elementy

Element opis Wymagania
Kiedy… Co najmniej jeden element określający if lub ifelse części choose zasad. Jeśli określono wiele when elementów, są one oceniane sekwencyjnie. condition Gdy element when oblicza truewartość , nie zostaną ocenione żadne dalsze when warunki. Tak
Inaczej Fragment kodu zasad do oceny, jeśli żaden z when warunków nie ma wartości true. Nie.

kiedy atrybuty

Atrybut opis Wymagania
condition Wyrażenie logiczne lub stała logiczna, która ma być oceniana podczas obliczania instrukcji zawierającej when zasady. Tak

Użycie

  • Sekcje zasad: ruch przychodzący, wychodzący, zaplecze, błąd
  • Zakresy zasad: globalny, obszar roboczy, produkt, interfejs API, operacja
  • Bramy: klasyczne, v2, zużycie, self-hosted

Przykłady

Modyfikowanie żądania i odpowiedzi na podstawie agenta użytkownika

W poniższym przykładzie przedstawiono zasady ustawiania zmiennych i dwie zasady przepływu sterowania.

Zasady zmiennej zestawu znajdują się w sekcji ruchu przychodzącego i tworzy zmienną kontekstową logiczną ustawioną isMobile na wartość true, jeśli User-Agent nagłówek żądania zawiera tekst iPad lub iPhone.

Pierwsze zasady przepływu sterowania są również w sekcji przychodzącej i warunkowo stosuje jedną z dwóch zasad parametrów ustaw ciąg zapytania w zależności od wartości zmiennej isMobile kontekstowej.

Druga zasada przepływu sterowania znajduje się w sekcji ruchu wychodzącego i warunkowo stosuje zasady Konwertuj xml na JSON , gdy isMobile jest ustawiona na truewartość .

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

Modyfikowanie odpowiedzi na podstawie nazwy produktu

W tym przykładzie pokazano, jak przeprowadzić filtrowanie zawartości przez usunięcie elementów danych z odpowiedzi odebranej z usługi zaplecza Starter podczas korzystania z produktu. Przykładowa odpowiedź zaplecza zawiera właściwości na poziomie głównym podobne do interfejsu API 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>

Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz: