Partage via


Flux de contrôle

S’APPLIQUE À : tous les niveaux de Gestion des API

Utilisez la stratégie choose pour appliquer de manière conditionnelle les instructions des stratégies en fonction des résultats de l’évaluation des expressions booléennes. Utilisez la stratégie pour le flux de contrôle de la même manière qu’une construction if-then-else ou une construction de commutateur dans un langage de programmation.

Notes

Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.

Instruction de la stratégie

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

La stratégie choose doit contenir au moins un élément <when/>. L’élément <otherwise/> est facultatif. Les conditions dans les éléments <when/> sont évaluées par ordre d’apparition dans la stratégie. La ou les déclarations de stratégie incluses dans le premier élément <when/> avec attribut de condition égal à true seront appliquées. Les stratégies incluses dans l’élément <otherwise/>, le cas échéant, seront appliquées si tous les attributs de condition de l’élément <when/> sont false.

Éléments

Élément Description Obligatoire
when Un ou plusieurs éléments spécifiant les parties if ou ifelse de la stratégie choose. Si plusieurs éléments when sont spécifiés, ils sont évalués séquentiellement. Une fois la condition d’un élément when évaluée à true, aucune autre condition when n’est évaluée. Oui
otherwise Extrait de stratégie à évaluer si aucune des conditions when ne correspond à true. Non

Attributs when

Attribut Description Obligatoire
condition Expression booléenne ou constante booléenne à évaluer quand la déclaration de stratégie when qui la contient est évaluée. Oui

Usage

Exemples

Modifier la demande et la réponse en fonction de l’agent utilisateur

L'exemple suivant présente une stratégie set-variable et deux stratégies de flux de contrôle.

La stratégie set variable se trouve dans la section inbound et crée une variable de isMobileisMobile booléenne qui a la valeur true si l’en-tête de demande User-Agent contient le texte iPad ou iPhone.

La première stratégie de flux de contrôle se trouve également dans la section inbound et applique de manière conditionnelle une des deux stratégies Set query string parameter selon la valeur de la variable de contexte isMobile.

La deuxième stratégie de flux de contrôle se trouve dans la section outbound et applique de manière conditionnelle la stratégie Convert XML to JSON si isMobile a la valeur 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>

Modifier la réponse en fonction du nom du produit

Cet exemple montre comment effectuer un filtrage du contenu en supprimant des éléments de données de la réponse reçue du service principal en cas d’utilisation du produit Starter. L’exemple de réponse back-end comprend des propriétés de niveau racine similaires à l’API d’appel OpenWeather One.

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

Pour plus d’informations sur l’utilisation des stratégies, consultez :