Stratégies avancées de la Gestion des APIAPI Management advanced policies

Cette rubrique est une ressource de référence au sujet des stratégies Gestion des API suivantes.This topic provides a reference for the following API Management policies. Pour plus d'informations sur l'ajout et la configuration des stratégies, consultez la page Stratégies dans Gestion des API.For information on adding and configuring policies, see Policies in API Management.

Stratégies avancéesAdvanced policies

  • Control flow : applique de manière conditionnelle les instructions de stratégie en fonction des résultats de l’évaluation des expressions booléennes.Control flow - Conditionally applies policy statements based on the results of the evaluation of Boolean expressions.
  • Forward request : transfère la demande vers le service principal.Forward request - Forwards the request to the backend service.
  • Limit concurrency : empêche les stratégies incluses d’exécuter plus de requêtes simultanées que le nombre spécifié.Limit concurrency - Prevents enclosed policies from executing by more than the specified number of requests at a time.
  • Log to Event Hub : envoie des messages au format spécifié à un Event Hub défini par une entité Enregistreur d’événements.Log to Event Hub - Sends messages in the specified format to an Event Hub defined by a Logger entity.
  • Mock response : abandonne l’exécution du pipeline et renvoie une réponse factice indiquée directement à l’appelant.Mock response - Aborts pipeline execution and returns a mocked response directly to the caller.
  • Retry : effectue une nouvelle tentative d’exécution des instructions de stratégie incluses, si la condition est remplie et jusqu’à ce qu’elle le soit.Retry - Retries execution of the enclosed policy statements, if and until the condition is met. L’exécution se répète à intervalles réguliers et ce jusqu’au nombre de tentatives défini.Execution will repeat at the specified time intervals and up to the specified retry count.
  • Return response : abandonne l’exécution du pipeline et renvoie la réponse indiquée directement à l’appelant.Return response - Aborts pipeline execution and returns the specified response directly to the caller.
  • Send one way request : envoie une demande à l’URL indiquée sans attendre de réponse.Send one way request - Sends a request to the specified URL without waiting for a response.
  • Send request : envoie une demande à l’URL indiquée.Send request - Sends a request to the specified URL.
  • Définir le proxy HTTP : vous permet de router les demandes transférées via un proxy HTTP.Set HTTP proxy - Allows you to route forwarded requests via an HTTP proxy.
  • Set request method : permet de modifier la méthode HTTP d’une demande.Set request method - Allows you to change the HTTP method for a request.
  • Set status code : permet de donner la valeur spécifiée au code d’état HTTP.Set status code - Changes the HTTP status code to the specified value.
  • Set variable : conserve une valeur dans une variable de contexte nommée pour permettre d’y accéder ultérieurement.Set variable - Persists a value in a named context variable for later access.
  • Trace : ajoute des traces personnalisées à la sortie API Inspector, aux données de télémétrie Application Insights et aux journaux de diagnostic.Trace - Adds custom traces into the API Inspector output, Application Insights telemetries, and Diagnostic Logs.
  • Wait : attend l’exécution des stratégies Send request, Get value from cache ou Control flow pour continuer.Wait - Waits for enclosed Send request, Get value from cache, or Control flow policies to complete before proceeding.

Control flowControl flow

La stratégie choose applique les instructions de stratégie incluses en fonction du résultat de l’évaluation d’expressions booléennes, de façon similaire à une construction de type if-then-else ou commutateur dans un langage de programmation.The choose policy applies enclosed policy statements based on the outcome of evaluation of Boolean expressions, similar to an if-then-else or a switch construct in a programming language.

Instruction de la stratégiePolicy statement

<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 de flux de contrôle doit contenir au moins un élément <when/>.The control flow policy must contain at least one <when/> element. L’élément <otherwise/> est facultatif.The <otherwise/> element is optional. Les conditions dans les éléments <when/> sont évaluées par ordre d’apparition dans la stratégie.Conditions in <when/> elements are evaluated in order of their appearance within the policy. La ou les déclarations de stratégie incluses dans le premier élément <when/> avec attribut de condition égal à true seront appliquées.Policy statement(s) enclosed within the first <when/> element with condition attribute equals true will be applied. 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.Policies enclosed within the <otherwise/> element, if present, will be applied if all of the <when/> element condition attributes are false.

ExemplesExamples

ExempleExample

L’exemple suivant montre une stratégie set-variable ainsi que deux stratégies de contrôle de flux.The following example demonstrates a set-variable policy and two control flow policies.

La stratégie set variable se trouve dans la section inbound et crée une variable de contexteisMobile booléenne qui a la valeur true si l’en-tête de demande User-Agent contient le texte iPad ou iPhone.The set variable policy is in the inbound section and creates an isMobile Boolean context variable that is set to true if the User-Agent request header contains the text iPad or 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.The first control flow policy is also in the inbound section, and conditionally applies one of two Set query string parameter policies depending on the value of the isMobile context variable.

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.The second control flow policy is in the outbound section and conditionally applies the Convert XML to JSON policy when isMobile is set to true.

<policies>
    <inbound>
        <set-variable name="isMobile" value="@(context.Request.Headers["User-Agent"].Contains("iPad") || context.Request.Headers["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>

ExempleExample

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.This example shows how to perform content filtering by removing data elements from the response received from the backend service when using the Starter product. Pour une démonstration de la configuration et de l’utilisation de cette stratégie, consultez Cloud Cover Episode 177: More API Management Features with Vlad Vinogradsky (Cloud Cover, épisode 177 : Plus de fonctionnalités de la Gestion des API avec Vlad Vinogradsky) et rendez-vous directement à 34 min 30 s.For a demonstration of configuring and using this policy, see Cloud Cover Episode 177: More API Management Features with Vlad Vinogradsky and fast-forward to 34:30. Commencez à 31 min 50 s pour voir une présentation de l’API The Dark Sky Forecast utilisée pour cette démonstration.Start at 31:50 to see an overview of The Dark Sky Forecast API used for this demo.

<!-- 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 api 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 [] {"minutely", "hourly", "daily", "flags"}) {
          response.Property (key).Remove ();
        }
        return response.ToString();
      }
    </set-body>
  </when>
</choose>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
choosechoose Élément racine.Root element. OuiYes
whenwhen Condition à utiliser pour les parties if ou ifelse de la stratégie choose.The condition to use for the if or ifelse parts of the choose policy. Si la stratégie choose possède plusieurs sections when, elles sont évaluées de façon séquentielle.If the choose policy has multiple when sections, they are evaluated sequentially. Une fois la condition d’un élément when évaluée à true, aucune autre condition when n’est évaluée.Once the condition of a when element evaluates to true, no further when conditions are evaluated. OuiYes
otherwiseotherwise Contient l’extrait de stratégie à utiliser si aucune des conditions when n’est évaluée à true.Contains the policy snippet to be used if none of the when conditions evaluate to true. NonNo

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired
condition="Boolean expression | Boolean constant"condition="Boolean expression | Boolean constant" Constante ou expression booléenne à évaluer lorsque la déclaration de stratégie when qui l’englobe est évaluée.The Boolean expression or constant to evaluated when the containing when policy statement is evaluated. OuiYes

UtilisationUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Forward requestForward request

La stratégie forward-request transfère la demande entrante au service principal spécifié dans le contexte de la demande.The forward-request policy forwards the incoming request to the backend service specified in the request context. L’URL du service back-end est spécifiée dans les paramètres de l’API et peut être modifiée à l’aide de la stratégie set backend service.The backend service URL is specified in the API settings and can be changed using the set backend service policy.

Notes

En cas de suppression cette stratégie, la demande n’est pas transférée au service principal et les stratégies de la section outbound sont évaluées immédiatement après la réussite des stratégies de la section inbound.Removing this policy results in the request not being forwarded to the backend service and the policies in the outbound section are evaluated immediately upon the successful completion of the policies in the inbound section.

Instruction de la stratégiePolicy statement

<forward-request timeout="time in seconds" follow-redirects="false | true" buffer-request-body="false | true" fail-on-error-status-code="false | true"/>

ExemplesExamples

ExempleExample

La stratégie au niveau de l’API suivante transfère toutes les demandes d’API au service back-end avec un délai d’expiration de 60 secondes.The following API level policy forwards all API requests to the backend service with a timeout interval of 60 seconds.

<!-- api level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request timeout="60"/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

ExempleExample

Cette stratégie au niveau de l’opération utilise l’élément base pour hériter de la stratégie backend de l’étendue au niveau de l’API parente.This operation level policy uses the base element to inherit the backend policy from the parent API level scope.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <base/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

ExempleExample

Cette stratégie au niveau de l’opération transfère explicitement toutes les demandes au service principal avec un délai d’expiration de 120 secondes et n’hérite pas de la stratégie principale au niveau de l’API parente.This operation level policy explicitly forwards all requests to the backend service with a timeout of 120 and does not inherit the parent API level backend policy. Si le service principal répond avec un code d’état d’erreur compris entre 400 et 599, la section on-error sera déclenchée.If the backend service responds with a error status code from 400 to 599 inclusive, on-error section will be triggered.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request timeout="120" fail-on-error-status-code="true" />
        <!-- effective policy. note the absence of <base/> -->
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

ExempleExample

Cette stratégie au niveau de l’opération ne transmet pas de demandes au service principal.This operation level policy does not forward requests to the backend service.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <!-- no forwarding to backend -->
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
forward-requestforward-request Élément racine.Root element. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
timeout="integer"timeout="integer" Durée, en secondes, de l’attente du retour des en-têtes de réponse HTTP par le service back-end avant de déclencher une erreur de délai d’expiration.The amount of time in seconds to wait for the HTTP response headers to be returned by the backend service before a timeout error is raised. La valeur minimale est 0 seconde.Minimum value is 0 seconds. Il est possible que les valeurs supérieures à 240 secondes ne soient pas prises en compte, car l’infrastructure réseau sous-jacente peut supprimer des connexions inactives après ce délai.Values greater than 240 seconds may not be honored as the underlying network infrastructure can drop idle connections after this time. NonNo NoneNone
follow-redirects="false | true"follow-redirects="false | true" Indique si les redirections à partir du service principal sont suivies par la passerelle ou renvoyées à l’appelant.Specifies whether redirects from the backend service are followed by the gateway or returned to the caller. NonNo falsefalse
buffer-request-body="false | true"buffer-request-body="false | true" Quand la valeur est « true », la demande est mise en mémoire tampon et sera réutilisée lors d’une nouvelle tentative.When set to "true" request is buffered and will be reused on retry. NonNo falsefalse
fail-on-error-status-code="false | true"fail-on-error-status-code="false | true" Quand la valeur est true, la section on-error est déclenchée pour les codes de réponse dans la plage comprise entre 400 et 599.When set to true triggers on-error section for response codes in the range from 400 to 599 inclusive. NonNo falsefalse

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : backendPolicy sections: backend
  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Limit concurrencyLimit concurrency

La stratégie limit-concurrency empêche les stratégies incluses d’exécuter plus de demandes simultanées que le nombre spécifié.The limit-concurrency policy prevents enclosed policies from executing by more than the specified number of requests at any time. En cas de dépassement de ce nombre, les nouvelles requêtes échouent immédiatement avec le code d’état 429 Trop de requêtes.Upon exceeding that number, new requests will fail immediately with 429 Too Many Requests status code.

Instruction de la stratégiePolicy statement

<limit-concurrency key="expression" max-count="number">
        <!— nested policy statements -->
</limit-concurrency>

ExemplesExamples

ExempleExample

L’exemple suivant montre comment limiter le nombre de requêtes transmises à un serveur principal en fonction de la valeur d’une variable contextuelle.The following example demonstrates how to limit number of requests forwarded to a backend based on the value of a context variable.

<policies>
  <inbound>…</inbound>
  <backend>
    <limit-concurrency key="@((string)context.Variables["connectionId"])" max-count="3">
      <forward-request timeout="120"/>
    <limit-concurrency/>
  </backend>
  <outbound>…</outbound>
</policies>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
limit-concurrencylimit-concurrency Élément racine.Root element. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
keykey Une chaîne.A string. Expression autorisée.Expression allowed. Spécifie l’étendue de la simultanéité.Specifies the concurrency scope. Peut être partagée par plusieurs stratégies.Can be shared by multiple policies. OuiYes N/AN/A
max-countmax-count Entier.An integer. Spécifie le nombre maximal de requêtes autorisées à entrer dans la stratégie.Specifies a maximum number of requests that are allowed to enter the policy. OuiYes N/AN/A

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Log to Event HubLog to Event Hub

La stratégie log-to-eventhub envoie des messages au format spécifié à un Event Hub défini par une entité Enregistreur d’événements.The log-to-eventhub policy sends messages in the specified format to an Event Hub defined by a Logger entity. Comme son nom l’indique, la stratégie est utilisée pour enregistrer certaines informations sur le contexte de la réponse ou de la demande à des fins d’analyse en ligne ou hors ligne.As its name implies, the policy is used for saving selected request or response context information for online or offline analysis.

Notes

Vous trouverez un guide de configuration étape par étape d’un Event Hub et des événements de journalisation à la page Guide pratique de l’enregistrement d’événements de la Gestion des API avec Azure Event Hubs.For a step-by-step guide on configuring an event hub and logging events, see How to log API Management events with Azure Event Hubs.

Instruction de la stratégiePolicy statement

<log-to-eventhub logger-id="id of the logger entity" partition-id="index of the partition where messages are sent" partition-key="value used for partition assignment">
  Expression returning a string to be logged
</log-to-eventhub>

ExempleExample

Toute chaîne peut être utilisée comme valeur à consigner dans Event Hubs.Any string can be used as the value to be logged in Event Hubs. Dans cet exemple, la date et l’heure, le nom de service de déploiement, l’ID de la demande, l’adresse IP et le nom de l’opération de tous les appels entrants sont consignés dans l’Enregistreur d’événements Event Hub avec l’ID contoso-loggerIn this example the date and time, deployment service name, request ID, IP address, and operation name for all inbound calls are logged to the event hub Logger registered with the contoso-logger ID

<policies>
  <inbound>
    <log-to-eventhub logger-id ='contoso-logger'>
      @( string.Join(",", DateTime.UtcNow, context.Deployment.ServiceName, context.RequestId, context.Request.IpAddress, context.Operation.Name) )
    </log-to-eventhub>
  </inbound>
  <outbound>
  </outbound>
</policies>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
log-to-eventhublog-to-eventhub Élément racine.Root element. La valeur de cet élément est la chaîne à consigner dans votre Event Hub.The value of this element is the string to log to your event hub. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired
logger-idlogger-id ID de l’Enregistreur d’événements inscrit auprès de votre service Gestion des API.The ID of the Logger registered with your API Management service. OuiYes
partition-idpartition-id Spécifie l’index de la partition où les messages sont envoyés.Specifies the index of the partition where messages are sent. facultatif.Optional. Cet attribut peut ne pas être utilisé si partition-key est utilisé.This attribute may not be used if partition-key is used.
partition-keypartition-key Spécifie la valeur utilisée pour l’affectation de partitions lorsque des messages sont envoyés.Specifies the value used for partition assignment when messages are sent. facultatif.Optional. Cet attribut peut ne pas être utilisé si partition-id est utilisé.This attribute may not be used if partition-id is used.

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Réponse facticeMock response

La mock-response, comme le nom l’indique, est utilisée pour simuler des API et des opérations.The mock-response, as the name implies, is used to mock APIs and operations. Elle interrompt l’exécution du pipeline et retourne une réponse factice à l’appelant.It aborts normal pipeline execution and returns a mocked response to the caller. La stratégie essaie toujours de renvoyer des réponses de la plus haute fidélité.The policy always tries to return responses of highest fidelity. Elle préfère les exemples de contenu de réponse, le cas échéant.It prefers response content examples, whenever available. Elle génère des exemples de réponses à partir de schémas, lorsque les schémas sont fournis et les exemples ne le sont pas.It generates sample responses from schemas, when schemas are provided and examples are not. Si aucun exemple ou schéma n’est trouvé, des réponses sans contenu sont retournées.If neither examples or schemas are found, responses with no content are returned.

Instruction de la stratégiePolicy statement

<mock-response status-code="code" content-type="media type"/>

ExemplesExamples

<!-- Returns 200 OK status code. Content is based on an example or schema, if provided for this
status code. First found content type is used. If no example or schema is found, the content is empty. -->
<mock-response/>

<!-- Returns 200 OK status code. Content is based on an example or schema, if provided for this
status code and media type. If no example or schema found, the content is empty. -->
<mock-response status-code='200' content-type='application/json'/>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
mock-responsemock-response Élément racine.Root element. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
status-codestatus-code Spécifie le code d’état de réponse et permet de sélectionner l’exemple ou le schéma correspondant.Specifies response status code and is used to select corresponding example or schema. NonNo 200200
content-typecontent-type Spécifie la valeur d’état de réponse Content-Type et permet de sélectionner l’exemple ou le schéma correspondant.Specifies Content-Type response header value and is used to select corresponding example or schema. NonNo NoneNone

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, on-errorPolicy sections: inbound, outbound, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

RetryRetry

La stratégie retry exécute ses stratégies enfants une fois, puis retente leur exécution jusqu’à ce que la condition de la nouvelle tentative devienne false ou que le count de nouvelles tentatives soit épuisé.The retry policy executes its child policies once and then retries their execution until the retry condition becomes false or retry count is exhausted.

Instruction de la stratégiePolicy statement


<retry
    condition="boolean expression or literal"
    count="number of retry attempts"
    interval="retry interval in seconds"
    max-interval="maximum retry interval in seconds"
    delta="retry interval delta in seconds"
    first-fast-retry="boolean expression or literal">
        <!-- One or more child policies. No restrictions -->
</retry>

ExempleExample

Dans l’exemple suivant, le transfert de la demande est retenté jusqu’à dix fois suivant un algorithme de nouvelles tentatives exponentiel.In the following example, request forwarding is retried up to ten times using an exponential retry algorithm. Étant donné que first-fast-retry a la valeur false, toutes les nouvelles tentatives sont soumises à l’algorithme de nouvelles tentatives exponentiel.Since first-fast-retry is set to false, all retry attempts are subject to the exponential retry algorithm.


<retry
    condition="@(context.Response.StatusCode == 500)"
    count="10"
    interval="10"
    max-interval="100"
    delta="10"
    first-fast-retry="false">
        <forward-request buffer-request-body="true" />
</retry>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
retryretry Élément racine.Root element. Peut contenir n’importe quelle autre stratégie sous forme d’élément enfant.May contain any other policies as its child elements. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
conditioncondition Expression ou littéral booléen spécifiant si les nouvelles tentatives doivent être arrêtées (false) ou poursuivies (true).A boolean literal or expression specifying if retries should be stopped (false) or continued (true). OuiYes N/AN/A
countcount Nombre positif spécifiant le nombre maximal de nouvelles tentatives à effectuer.A positive number specifying the maximum number of retries to attempt. OuiYes N/AN/A
intervalinterval Nombre positif en secondes spécifiant le délai d’attente entre les tentatives.A positive number in seconds specifying the wait interval between the retry attempts. OuiYes N/AN/A
max-intervalmax-interval Nombre positif en secondes spécifiant le délai d’attente maximal entre les tentatives.A positive number in seconds specifying the maximum wait interval between the retry attempts. Il est utilisé pour implémenter un algorithme de nouvelles tentatives exponentiel.It is used to implement an exponential retry algorithm. NonNo N/AN/A
deltadelta Nombre positif en secondes spécifiant l’incrément du délai d’attente.A positive number in seconds specifying the wait interval increment. Il est utilisé pour implémenter les algorithmes de nouvelles tentatives linéaires et exponentiels.It is used to implement the linear and exponential retry algorithms. NonNo N/AN/A
first-fast-retryfirst-fast-retry S’il a la valeur true, la première des nouvelles tentatives est effectuée immédiatement.If set to true , the first retry attempt is performed immediately. NonNo false

Notes

Lorsque seul interval est spécifié, les nouvelles tentatives sont effectuées à intervalles fixes.When only the interval is specified, fixed interval retries are performed. Lorsque seuls interval et delta sont spécifiés, un algorithme de nouvelles tentatives à intervalle linéaire est utilisé, suivant lequel le temps d’attente entre les tentatives est calculé selon la formule suivante : interval + (count - 1)*delta.When only the interval and delta are specified, a linear interval retry algorithm is used, where wait time between retries is calculated according the following formula - interval + (count - 1)*delta. Lorsque interval, max-interval et delta sont spécifiés, l’algorithme de nouvelles tentatives à intervalle exponentiel s’applique, suivant lequel le temps d’attente entre les tentatives augmente de façon exponentielle entre la valeur interval et la valeur max-interval selon la formule suivante : min(interval + (2^count - 1) * random(delta * 0.8, delta * 1.2), max-interval).When the interval, max-interval and delta are specified, exponential interval retry algorithm is applied, where the wait time between the retries is growing exponentially from the value of interval to the value max-interval according to the following formula - min(interval + (2^count - 1) * random(delta * 0.8, delta * 1.2), max-interval).

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes . Notez que des restrictions d’utilisation des stratégies enfants seront héritées par cette stratégie.Note that child policy usage restrictions will be inherited by this policy.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Return responseReturn response

La stratégie return-response abandonne l’exécution du pipeline et renvoie une réponse par défaut ou personnalisée à l’appelant.The return-response policy aborts pipeline execution and returns either a default or custom response to the caller. La réponse par défaut est 200 OK sans corps.Default response is 200 OK with no body. La réponse personnalisée peut être spécifiée par le biais d’instructions de stratégie ou d’une variable de contexte.Custom response can be specified via a context variable or policy statements. Lorsque les deux sont fournies, la réponse contenue dans la variable de contexte est modifiée par les instructions de stratégie avant d’être renvoyée à l’appelant.When both are provided, the response contained within the context variable is modified by the policy statements before being returned to the caller.

Instruction de la stratégiePolicy statement

<return-response response-variable-name="existing context variable">
  <set-header/>
  <set-body/>
  <set-status/>
</return-response>

ExempleExample

<return-response>
   <set-status code="401" reason="Unauthorized"/>
   <set-header name="WWW-Authenticate" exists-action="override">
      <value>Bearer error="invalid_token"</value>
   </set-header>
</return-response>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
return-responsereturn-response Élément racine.Root element. OuiYes
set-headerset-header Instruction de stratégie set-header.A set-header policy statement. NonNo
set-bodyset-body Instruction de stratégie set-body.A set-body policy statement. NonNo
set-statusset-status Instruction de stratégie set-status.A set-status policy statement. NonNo

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired
response-variable-nameresponse-variable-name Nom de la variable de contexte référencée à partir, par exemple, d’une stratégie send-request en amont et contenant un objet Response.The name of the context variable referenced from, for example, an upstream send-request policy and containing a Response object facultatif.Optional.

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Send one way requestSend one way request

La stratégie send-one-way-request envoie une demande à l’URL indiquée sans attendre de réponse.The send-one-way-request policy sends the provided request to the specified URL without waiting for a response.

Instruction de la stratégiePolicy statement

<send-one-way-request mode="new | copy">
  <url>...</url>
  <method>...</method>
  <header name="" exists-action="override | skip | append | delete">...</header>
  <body>...</body>
  <authentication-certificate thumbprint="thumbprint" />
</send-one-way-request>

ExempleExample

Cet exemple de stratégie montre un exemple d’utilisation de la stratégie send-one-way-request pour envoyer un message à une salle de conversation Slack si le code de la réponse HTTP est supérieur ou égal à 500.This sample policy shows an example of using the send-one-way-request policy to send a message to a Slack chat room if the HTTP response code is greater than or equal to 500. Pour plus d’informations sur cet exemple, consultez la page Utilisation de services externes à partir du service Gestion des API Azure.For more information on this sample, see Using external services from the Azure API Management service.

<choose>
    <when condition="@(context.Response.StatusCode >= 500)">
      <send-one-way-request mode="new">
        <set-url>https://hooks.slack.com/services/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</set-url>
        <set-method>POST</set-method>
        <set-body>@{
                return new JObject(
                        new JProperty("username","APIM Alert"),
                        new JProperty("icon_emoji", ":ghost:"),
                        new JProperty("text", String.Format("{0} {1}\nHost: {2}\n{3} {4}\n User: {5}",
                                                context.Request.Method,
                                                context.Request.Url.Path + context.Request.Url.QueryString,
                                                context.Request.Url.Host,
                                                context.Response.StatusCode,
                                                context.Response.StatusReason,
                                                context.User.Email
                                                ))
                        ).ToString();
            }</set-body>
      </send-one-way-request>
    </when>
</choose>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
send-one-way-requestsend-one-way-request Élément racine.Root element. OuiYes
urlurl URL de la demande.The URL of the request. Non si mode=copy ; sinon, oui.No if mode=copy; otherwise yes.
methodmethod Méthode HTTP de la demande.The HTTP method for the request. Non si mode=copy ; sinon, oui.No if mode=copy; otherwise yes.
en-têteheader En-tête de demande.Request header. Utilisez un élément d’en-tête pour chaque en-tête de demande.Use multiple header elements for multiple request headers. NonNo
bodybody Corps de la demande.The request body. NonNo
authentication-certificateauthentication-certificate Certificat à utiliser pour l’authentification du clientCertificate to use for client authentication NonNo

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
mode="string"mode="string" Détermine s’il s’agit d’une nouvelle demande ou d’une copie de la demande actuelle.Determines whether this is a new request or a copy of the current request. En mode outbound, mode=copy n’initialise pas le corps de la demande.In outbound mode, mode=copy does not initialize the request body. NonNo NouveauNew
namename Spécifie le nom de l’en-tête à définir.Specifies the name of the header to be set. OuiYes N/AN/A
exists-actionexists-action Spécifie l’action à entreprendre lorsque l’en-tête est déjà spécifié.Specifies what action to take when the header is already specified. Cet attribut doit avoir une des valeurs suivantes.This attribute must have one of the following values.

- override : remplace la valeur de l’en-tête actuel.- override - replaces the value of the existing header.
- skip : ne remplace pas la valeur de l’en-tête actuel.- skip - does not replace the existing header value.
- append : ajoute la valeur à celle de l’en-tête actuel.- append - appends the value to the existing header value.
- delete : supprime l’en-tête de la demande.- delete - removes the header from the request.

S’il a la valeur override, l’inscription de plusieurs entrées portant le même nom fait que l’en-tête est défini selon toutes les entrées (qui figurent plusieurs fois) ; seules les valeurs listées seront définies dans le résultat.When set to override enlisting multiple entries with the same name results in the header being set according to all entries (which will be listed multiple times); only listed values will be set in the result.
NonNo overrideoverride

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Send requestSend request

La stratégie send-request envoie la demande fournie à l’URL spécifiée, sans attendre plus longtemps que la valeur du délai d’expiration définie.The send-request policy sends the provided request to the specified URL, waiting no longer than the set timeout value.

Instruction de la stratégiePolicy statement

<send-request mode="new|copy" response-variable-name="" timeout="60 sec" ignore-error
="false|true">
  <set-url>...</set-url>
  <set-method>...</set-method>
  <set-header name="" exists-action="override|skip|append|delete">...</set-header>
  <set-body>...</set-body>
  <authentication-certificate thumbprint="thumbprint" />
</send-request>

ExempleExample

Cet exemple montre un moyen de vérifier un jeton de référence avec un serveur d’autorisation.This example shows one way to verify a reference token with an authorization server. Pour plus d’informations sur cet exemple, consultez la page Utilisation de services externes à partir du service Gestion des API Azure.For more information on this sample, see Using external services from the Azure API Management service.

<inbound>
  <!-- Extract Token from Authorization header parameter -->
  <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />

  <!-- Send request to Token Server to validate token (see RFC 7662) -->
  <send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
    <set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
    <set-method>POST</set-method>
    <set-header name="Authorization" exists-action="override">
      <value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
    </set-header>
    <set-header name="Content-Type" exists-action="override">
      <value>application/x-www-form-urlencoded</value>
    </set-header>
    <set-body>@($"token={(string)context.Variables["token"]}")</set-body>
  </send-request>

  <choose>
        <!-- Check active property in response -->
        <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
            <!-- Return 401 Unauthorized with http-problem payload -->
            <return-response>
                <set-status code="401" reason="Unauthorized" />
                <set-header name="WWW-Authenticate" exists-action="override">
                    <value>Bearer error="invalid_token"</value>
                </set-header>
            </return-response>
        </when>
    </choose>
  <base />
</inbound>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
send-requestsend-request Élément racine.Root element. OuiYes
urlurl URL de la demande.The URL of the request. Non si mode=copy ; sinon, oui.No if mode=copy; otherwise yes.
methodmethod Méthode HTTP de la demande.The HTTP method for the request. Non si mode=copy ; sinon, oui.No if mode=copy; otherwise yes.
en-têteheader En-tête de demande.Request header. Utilisez un élément d’en-tête pour chaque en-tête de demande.Use multiple header elements for multiple request headers. NonNo
bodybody Corps de la demande.The request body. NonNo
authentication-certificateauthentication-certificate Certificat à utiliser pour l’authentification du clientCertificate to use for client authentication NonNo

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
mode="string"mode="string" Détermine s’il s’agit d’une nouvelle demande ou d’une copie de la demande actuelle.Determines whether this is a new request or a copy of the current request. En mode outbound, mode=copy n’initialise pas le corps de la demande.In outbound mode, mode=copy does not initialize the request body. NonNo NouveauNew
response-variable-name="string"response-variable-name="string" Nom de la variable contextuelle qui recevra un objet Response.The name of context variable that will receive a response object. Si la variable n’existe pas, elle est créée après l’exécution réussie de la stratégie, et devient accessible par le biais de la collection context.Variable.If the variable doesn't exist, it will be created upon successful execution of the policy and will become accessible via context.Variable collection. OuiYes N/AN/A
timeout="integer"timeout="integer" Délai d’expiration en secondes avant l’échec de l’appel à l’URL.The timeout interval in seconds before the call to the URL fails. NonNo 6060
ignore-errorignore-error S’il a la valeur true et que la demande aboutit à une erreur :If true and the request results in an error:

- Si response-variable-name a été spécifié, il contiendra une valeur Null.- If response-variable-name was specified it will contain a null value.
- Si response-variable-name n’est pas spécifié, context.Request ne sera pas mis à jour.- If response-variable-name was not specified, context.Request will not be updated.
NonNo falsefalse
namename Spécifie le nom de l’en-tête à définir.Specifies the name of the header to be set. OuiYes N/AN/A
exists-actionexists-action Spécifie l’action à entreprendre lorsque l’en-tête est déjà spécifié.Specifies what action to take when the header is already specified. Cet attribut doit avoir une des valeurs suivantes.This attribute must have one of the following values.

- override : remplace la valeur de l’en-tête actuel.- override - replaces the value of the existing header.
- skip : ne remplace pas la valeur de l’en-tête actuel.- skip - does not replace the existing header value.
- append : ajoute la valeur à celle de l’en-tête actuel.- append - appends the value to the existing header value.
- delete : supprime l’en-tête de la demande.- delete - removes the header from the request.

S’il a la valeur override, l’inscription de plusieurs entrées portant le même nom fait que l’en-tête est défini selon toutes les entrées (qui figurent plusieurs fois) ; seules les valeurs listées seront définies dans le résultat.When set to override enlisting multiple entries with the same name results in the header being set according to all entries (which will be listed multiple times); only listed values will be set in the result.
NonNo overrideoverride

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Définir le proxy HTTPSet HTTP proxy

La stratégie proxy vous permet de router les demandes transférées aux back-ends via un proxy HTTP.The proxy policy allows you to route requests forwarded to backends via an HTTP proxy. Seul HTTP (et pas HTTPS) est pris en charge entre la passerelle et le proxy.Only HTTP (not HTTPS) is supported between the gateway and the proxy. Authentification de base et NTLM uniquement.Basic and NTLM authentication only.

Instruction de la stratégiePolicy statement

<proxy url="http://hostname-or-ip:port" username="username" password="password" />

ExempleExample

Notez l’utilisation de propriétés en tant que valeurs du nom d’utilisateur et du mot de passe pour éviter de stocker des informations sensibles dans le document de stratégie.Note the use of properties as values of the username and password to avoid storing sensitive information in the policy document.

<proxy url="http://192.168.1.1:8080" username={{username}} password={{password}} />

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
proxyproxy Élément racineRoot element OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
url="chaîne"url="string" URL du proxy sous la forme http://host:port.Proxy URL in the form of http://host:port. OuiYes N/AN/A
username="chaîne"username="string" Nom d’utilisateur à utiliser pour l’authentification auprès du proxy.Username to be used for authentication with the proxy. NonNo N/AN/A
password="chaîne"password="string" Mot de passe à utiliser pour l’authentification auprès du proxy.Password to be used for authentication with the proxy. NonNo N/AN/A

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inboundPolicy sections: inbound

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Set request methodSet request method

La stratégie set-method permet de modifier la méthode d’une requête HTTP.The set-method policy allows you to change the HTTP request method for a request.

Instruction de la stratégiePolicy statement

<set-method>METHOD</set-method>

ExempleExample

Cet exemple de stratégie, qui utilise la stratégie set-method, montre un exemple d’envoi d’un message à une salle de conversation Slack si le code de la réponse HTTP est supérieur ou égal à 500.This sample policy that uses the set-method policy shows an example of sending a message to a Slack chat room if the HTTP response code is greater than or equal to 500. Pour plus d’informations sur cet exemple, consultez la page Utilisation de services externes à partir du service Gestion des API Azure.For more information on this sample, see Using external services from the Azure API Management service.

<choose>
    <when condition="@(context.Response.StatusCode >= 500)">
      <send-one-way-request mode="new">
        <set-url>https://hooks.slack.com/services/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</set-url>
        <set-method>POST</set-method>
        <set-body>@{
                return new JObject(
                        new JProperty("username","APIM Alert"),
                        new JProperty("icon_emoji", ":ghost:"),
                        new JProperty("text", String.Format("{0} {1}\nHost: {2}\n{3} {4}\n User: {5}",
                                                context.Request.Method,
                                                context.Request.Url.Path + context.Request.Url.QueryString,
                                                context.Request.Url.Host,
                                                context.Response.StatusCode,
                                                context.Response.StatusReason,
                                                context.User.Email
                                                ))
                        ).ToString();
            }</set-body>
      </send-one-way-request>
    </when>
</choose>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
set-methodset-method Élément racine.Root element. La valeur de l’élément spécifie la méthode HTTP.The value of the element specifies the HTTP method. OuiYes

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, on-errorPolicy sections: inbound, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Set status codeSet status code

La stratégie set-status permet de donner la valeur spécifiée au code d’état HTTP.The set-status policy sets the HTTP status code to the specified value.

Instruction de la stratégiePolicy statement

<set-status code="" reason=""/>

ExempleExample

Cet exemple montre comment renvoyer une réponse 401 si le jeton d’autorisation n’est pas valide.This example shows how to return a 401 response if the authorization token is invalid. Pour plus d’informations, consultez la page Utiliser des services externes à partir du service Gestion des API Azure.For more information, see Using external services from the Azure API Management service

<choose>
  <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
    <return-response response-variable-name="existing response variable">
      <set-status code="401" reason="Unauthorized" />
      <set-header name="WWW-Authenticate" exists-action="override">
        <value>Bearer error="invalid_token"</value>
      </set-header>
    </return-response>
  </when>
</choose>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
set-statusset-status Élément racine.Root element. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
code="integer"code="integer" Code d’état HTTP à renvoyer.The HTTP status code to return. OuiYes N/AN/A
reason="string"reason="string" Description du motif pour lequel le code d’état est renvoyé.A description of the reason for returning the status code. OuiYes N/AN/A

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : outbound, backend, on-errorPolicy sections: outbound, backend, on-error
  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Set variableSet variable

La stratégie set-variable déclare une variable de contexte et lui affecte une valeur spécifiée par le biais d’une expression ou d’un littéral chaîne.The set-variable policy declares a context variable and assigns it a value specified via an expression or a string literal. Si l’expression contient un littéral, il sera converti en chaîne et le type de la valeur sera System.String.if the expression contains a literal it will be converted to a string and the type of the value will be System.String.

Instruction de la stratégiePolicy statement

<set-variable name="variable name" value="Expression | String literal" />

ExempleExample

L’exemple suivant montre une stratégie set variable dans la section inbound.The following example demonstrates a set variable policy in the inbound section. Cette stratégie set variable crée une variable de contexteisMobile booléenne qui a la valeur true si l’en-tête de demande User-Agent contient le texte iPad ou iPhone.This set variable policy creates an isMobile Boolean context variable that is set to true if the User-Agent request header contains the text iPad or iPhone.

<set-variable name="IsMobile" value="@(context.Request.Headers["User-Agent"].Contains("iPad") || context.Request.Headers["User-Agent"].Contains("iPhone"))" />

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
set-variableset-variable Élément racine.Root element. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired
namename Nom de la variable.The name of the variable. OuiYes
valuevalue Valeur de la variable.The value of the variable. Peut être une expression ou une valeur littérale.This can be an expression or a literal value. OuiYes

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error
  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Types autorisésAllowed types

Les expressions utilisées dans la stratégie set-variable doivent renvoyer un des types de base suivants.Expressions used in the set-variable policy must return one of the following basic types.

  • System.BooleanSystem.Boolean
  • System.SByteSystem.SByte
  • System.ByteSystem.Byte
  • System.UInt16System.UInt16
  • System.UInt32System.UInt32
  • System.UInt64System.UInt64
  • System.Int16System.Int16
  • System.Int32System.Int32
  • System.Int64System.Int64
  • System.DecimalSystem.Decimal
  • System.SingleSystem.Single
  • System.DoubleSystem.Double
  • System.GuidSystem.Guid
  • System.StringSystem.String
  • System.CharSystem.Char
  • System.DateTimeSystem.DateTime
  • System.TimeSpanSystem.TimeSpan
  • System.Byte?System.Byte?
  • System.UInt16?System.UInt16?
  • System.UInt32?System.UInt32?
  • System.UInt64?System.UInt64?
  • System.Int16?System.Int16?
  • System.Int32?System.Int32?
  • System.Int64?System.Int64?
  • System.Decimal?System.Decimal?
  • System.Single?System.Single?
  • System.Double?System.Double?
  • System.Guid?System.Guid?
  • System.String?System.String?
  • System.Char?System.Char?
  • System.DateTime?System.DateTime?

TraceTrace

La stratégie trace ajoute une trace personnalisée à la sortie API Inspector, aux données de télémétrie Application Insights et/ou aux journaux de diagnostic.The trace policy adds a custom trace into the API Inspector output, Application Insights telemetries, and/or Diagnostic Logs.

  • La stratégie ajoute une trace personnalisée à la sortie API Inspector quand le suivi est déclenché, c.-à-d. que l’en-tête de demande Ocp-Apim-Trace est présent et a la valeur true et que l’en-tête de requête Ocp-Apim-Subscription-Key est présent et contient une clé valide qui autorise le suivi.The policy adds a custom trace to the API Inspector output when tracing is triggered, i.e. Ocp-Apim-Trace request header is present and set to true and Ocp-Apim-Subscription-Key request header is present and holds a valid key that allows tracing.
  • La stratégie crée des données de télémétrie Trace dans Application Insights, quand l’intégration à Application Insights est activée et que le niveau severity spécifié dans la stratégie est supérieur ou égal au niveau verbosity spécifié dans le paramètre du diagnostic.The policy creates a Trace telemetry in Application Insights, when Application Insights integration is enabled and the severity level specified in the policy is at or higher than the verbosity level specified in the diagnostic setting.
  • La stratégie ajoute une propriété dans l’entrée du journal quand les journaux de diagnostic sont activés et que le niveau de gravité spécifié dans la stratégie est supérieur ou égal au niveau de verbosité spécifié dans le paramètre du diagnostic.The policy adds a property in the log entry when Diagnostic Logs is enabled and the severity level specified in the policy is at or higher than the verbosity level specified in the diagnostic setting.

Instruction de la stratégiePolicy statement


<trace source="arbitrary string literal" severity="verbose|information|error">
    <message>String literal or expressions</message>
    <metadata name="string literal or expressions" value="string literal or expressions"/>
</trace>

ExempleExample

<trace source="PetStore API" severity="verbose">
    <message>@((string)context.Variables["clientConnectionID"])</message>
    <metadata name="Operation Name" value="New-Order"/>
</trace>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
tracetrace Élément racine.Root element. OuiYes
messagemessage Chaîne ou expression à journaliser.A string or expression to be logged. OuiYes
metadatametadata Ajoute une propriété personnalisée aux données de télémétrie Trace Application Insights.Adds a custom property to the Application Insights Trace telemetry. NonNo

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
sourcesource Littéral chaîne significatif pour la visionneuse de trace, qui spécifie la source du message.String literal meaningful to the trace viewer and specifying the source of the message. OuiYes N/AN/A
severityseverity Spécifie le niveau de gravité de la trace.Specifies the severity level of the trace. Les valeurs autorisées sont verbose, information et error (de la plus petite à la plus élevée).Allowed values are verbose, information, error (from lowest to highest). NonNo CommentairesVerbose
namename Nom de la propriété.Name of the property. OuiYes N/AN/A
valuevalue Valeur de la propriété.Value of the property. OuiYes N/AN/A

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes .

  • Sections de la stratégie : inbound, outbound, backend, on-errorPolicy sections: inbound, outbound, backend, on-error

  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

WaitWait

La stratégie wait exécute ses stratégies enfants immédiates en parallèle et attend la fin de la totalité ou de l’une de ses stratégies enfants immédiates pour se terminer.The wait policy executes its immediate child policies in parallel, and waits for either all or one of its immediate child policies to complete before it completes. La stratégie d’attente peut avoir comme stratégies enfants immédiates les stratégies Send request, Get value from cache et Control flow.The wait policy can have as its immediate child policies Send request, Get value from cache, and Control flow policies.

Instruction de la stratégiePolicy statement

<wait for="all|any">
  <!--Wait policy can contain send-request, cache-lookup-value,
        and choose policies as child elements -->
</wait>

ExempleExample

Dans l’exemple suivant, deux stratégies choose sont les stratégies enfants immédiates de la stratégie wait.In the following example there are two choose policies as immediate child policies of the wait policy. Ces deux stratégies choose s’exécutent en parallèle.Each of these choose policies executes in parallel. Chaque stratégie choose essaie de récupérer une valeur en cache.Each choose policy attempts to retrieve a cached value. En cas d’échec de cache, un service principal est appelé pour fournir la valeur.If there is a cache miss, a backend service is called to provide the value. Dans cet exemple, la stratégie wait ne se termine pas tant que toutes ses stratégies enfants immédiates ne sont pas terminées, car l’attribut for a la valeur all.In this example the wait policy does not complete until all of its immediate child policies complete, because the for attribute is set to all. Dans cet exemple, les variables de contexte (execute-branch-one, value-one, execute-branch-two et value-two) sont déclarées hors de l’étendue de cet exemple de stratégie.In this example the context variables (execute-branch-one, value-one, execute-branch-two, and value-two) are declared outside of the scope of this example policy.

<wait for="all">
  <choose>
    <when condition="@((bool)context.Variables["execute-branch-one="])">
      <cache-lookup-value key="key-one" variable-name="value-one" />
      <choose>
        <when condition="@(!context.Variables.ContainsKey("value-one="))">
          <send-request mode="new" response-variable-name="value-one">
            <set-url>https://backend-one</set-url>
            <set-method>GET</set-method>
          </send-request>
        </when>
      </choose>
    </when>
  </choose>
  <choose>
    <when condition="@((bool)context.Variables["execute-branch-two="])">
      <cache-lookup-value key="key-two" variable-name="value-two" />
      <choose>
        <when condition="@(!context.Variables.ContainsKey("value-two="))">
          <send-request mode="new" response-variable-name="value-two">
            <set-url>https://backend-two</set-url>
            <set-method>GET</set-method>
          </send-request>
        </when>
      </choose>
    </when>
  </choose>
</wait>

ÉlémentsElements

ÉlémentElement DescriptionDescription ObligatoireRequired
waitwait Élément racine.Root element. Ne peut contenir comme éléments enfants que les stratégies send-request, cache-lookup-value et choose.May contain as child elements only send-request, cache-lookup-value, and choose policies. OuiYes

AttributsAttributes

AttributAttribute DescriptionDescription ObligatoireRequired DefaultDefault
forfor Détermine si la stratégie wait attend la fin de toutes les stratégies enfants immédiates ou d’une seule.Determines whether the wait policy waits for all immediate child policies to be completed or just one. Les valeurs autorisées sont les suivantes :Allowed values are:

- all : attend la fin de toutes les stratégies enfants immédiates.- all - wait for all immediate child policies to complete
- any : attend la fin d’une stratégie enfant immédiate.- any - wait for any immediate child policy to complete. Une fois la première stratégie enfant immédiate terminée, la stratégie wait se termine et l’exécution de toutes les autres stratégies enfants immédiates est arrêtée.Once the first immediate child policy has completed, the wait policy completes and execution of any other immediate child policies is terminated.
NonNo allall

UsageUsage

Cette stratégie peut être utilisée dans les sections et étendues de stratégie suivantes.This policy can be used in the following policy sections and scopes.

  • Sections de la stratégie : inbound, outbound, backendPolicy sections: inbound, outbound, backend
  • Étendues de la stratégie : toutes les étenduesPolicy scopes: all scopes

Étapes suivantesNext steps

Pour plus d’informations sur l’utilisation de stratégies, consultez les pages :For more information working with policies, see: