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 . |
Sí |
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. |
Sí |
Uso
- Secciones de directiva: entrante, saliente, back-end, on-error
- Ámbitos de la directiva: global, área de trabajo, producto, API, operación
- Puertas de enlace: clásica, v2, consumo, autohospedada y área de trabajo
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>
Directivas relacionadas
Contenido relacionado
Para más información sobre el trabajo con directivas, vea:
- Tutorial: Transformación y protección de una API
- Referencia de directivas para una lista completa de instrucciones de directivas y su configuración
- Expresiones de directiva
- Establecimiento o edición de directivas
- Reutilización de configuraciones de directivas
- Repositorio de fragmentos de código de directiva
- Creación de directivas mediante Microsoft Copilot en Azure