Compartir vía


Flujo de control

SE APLICA A: todos los niveles de API Management

Use la directiva choose para aplicar condicionalmente instrucciones de directiva basadas en los resultados de la evaluación de expresiones booleanas. Use la directiva para el flujo de control similar a una construcción if-then-else o una construcción de modificador en un lenguaje de programación.

Nota:

Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.

Instrucción de la directiva

<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 directiva choose debe contener al menos un elemento <when/>. El elemento <otherwise/> es opcional. Las condiciones de los elementos <when/> se evalúan en orden de aparición dentro de la directiva. Se aplicarán las declaraciones de directivas adjuntas en el primer elemento <when/> cuyo atributo de condición sea igual a true. Las directivas incluidas dentro del elemento <otherwise/>, si está presente, se aplicarán si todos los atributos de condición del elemento <when/> son false.

Elementos

Elemento Descripción Obligatorio
when Uno o varios elementos que especifican las partes if o ifelse de la directiva choose. Si se especifican varios elementos when, estos se evalúan secuencialmente. Una vez que la instancia de condition de un elemento when se evalúa en true, ya no se evalúan más condiciones when.
otherwise El fragmento de código de directiva que se evaluará si ninguna de las condiciones when se evalúan como true. No

Atributos when

Atributo Descripción Obligatorio
condición La expresión o constante booleana que se va a evaluar cuando se evalúa la declaración de la directiva when que la contiene.

Uso

Ejemplos

Modificación de la solicitud y la respuesta en función del agente de usuario

En el ejemplo siguiente se muestra una directiva set-variable y dos directivas de flujo de control.

La directiva de establecimiento de variable se encuentra en la sección de entrada y crea una variable de isMobile booleana isMobile que se establece en true si el encabezado de la solicitud User-Agent contiene el texto iPad o iPhone.

La primera directiva de flujo de control se encuentra también en la sección de entrada y aplica condicionalmente una de las dos directivas de establecimiento del parámetro de cadena de consulta dependiendo del valor de la variable de contexto isMobile.

La segunda directiva de flujo de control se encuentra en la sección de salida y aplica la directiva de onversión de XML a JSON solo cuando isMobile está establecida en 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>

Modificación de la respuesta según el nombre del producto

En este ejemplo se muestra cómo filtrar contenido quitando elementos de datos de la respuesta recibida del servicio back-end al usar el producto Starter. En la respuesta de back-end de ejemplo se incluyen propiedades de nivel raíz similares a One Call API de 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>

Para más información sobre el trabajo con directivas, vea: