Vous consultez la documentation d'Apigee Edge.
Accédez à la documentation sur Apigee X. info
Quoi
La règle AssignMessage modifie ou crée des messages de requête et de réponse pendant le flux du proxy d'API. La règle vous permet d'effectuer les actions suivantes sur ces messages :
- Ajouter de nouveaux paramètres de formulaire, d'en-têtes ou de requête à un message.
- Copier des propriétés existantes d'un message à un autre
- Supprimer des en-têtes, des paramètres de requête, des paramètres de formulaire et/ou des charges utiles de message d'un message
- Définir la valeur des propriétés existantes dans un message.
Avec la règle AssignMessage, vous ajoutez, modifiez ou supprimez généralement des propriétés de la requête ou de la réponse. Toutefois, vous pouvez également utiliser la règle AssignMessage pour créer un message de requête ou de réponse personnalisé et le transmettre à une autre cible, comme décrit dans la section Créer des messages de requête personnalisés.
La règle AssignMessage peut créer ou modifier des variables de flux avec les éléments enfants suivants :
Élément <AssignMessage>
Définit une stratégie AssignMessage.
Valeur par défaut | Consultez l'onglet Règles par défaut ci-dessous. |
Obligatoire ? | Obligatoire |
Type | Objet complexe |
Élément parent | Non disponible |
Éléments enfants |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
L'élément <AssignMessage>
utilise la syntaxe suivante :
Syntaxe
L'élément <AssignMessage>
utilise la syntaxe suivante :
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Règle par défaut
L'exemple suivant montre les paramètres par défaut lorsque vous ajoutez une règle AssignMessage à votre flux dans l'interface utilisateur Edge:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <ReasonPhrase/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Lorsque vous insérez une nouvelle stratégie AssignMessage dans l'interface utilisateur d'Edge, le modèle contient des bouchons pour toutes les opérations possibles. En règle générale, vous devez sélectionner les opérations que vous souhaitez effectuer avec cette règle et supprimer le reste des éléments enfants. Par exemple, si vous souhaitez effectuer une opération de copie, utilisez l'élément <Copy>
et supprimez <Add>
, <Remove>
et d'autres éléments enfants de la règle pour la rendre plus lisible.
This element has the following attributes that are common to all policies:
Attribute | Default | Required? | Description |
---|---|---|---|
name |
N/A | Required |
The internal name of the policy. The value of the Optionally, use the |
continueOnError |
false | Optional | Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails. |
enabled |
true | Optional | Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow. |
async |
false | Deprecated | This attribute is deprecated. |
Le tableau suivant fournit une description détaillée des éléments enfants de <AssignMessage>
:
Élément enfant | Obligatoire ? | Description |
---|---|---|
Opérations courantes | ||
<Add> |
Facultatif | Ajoute des informations à l'objet message spécifié par l'élément <AssignTo> .
|
<Copy> |
Facultatif | Copie des informations à partir du message spécifié par l'attribut source dans l'objet message spécifié par l'élément <AssignTo> . |
<Remove> |
Facultatif | Supprime les éléments spécifiés de la variable de message spécifiée dans l'élément <AssignTo> . |
<Set> |
Facultatif | Remplace les valeurs des propriétés existantes dans la requête ou la réponse qui est spécifiée par l'élément <AssignTo> .
|
Autres éléments enfants | ||
<AssignTo> |
Facultatif | Indique le message sur lequel la stratégie AssignMessage fonctionne. Il peut s'agir de la requête ou de la réponse standard, ou d'un nouveau message personnalisé. |
<AssignVariable> |
Facultatif | Attribue une valeur à une variable de flux. Si la variable n'existe pas, <AssignVariable> la crée. |
<IgnoreUnresolvedVariables> |
Facultatif | Détermine si le traitement s'arrête lorsqu'une variable non résolue est rencontrée. |
Chacun des éléments enfants est décrit dans les sections ci-après.
Exemples
Les exemples suivants illustrent certaines des manières dont vous pouvez utiliser la règle AssignMessage:
1 : Ajouter un en-tête
L'exemple suivant ajoute un en-tête à la requête avec l'élément <Add>
:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
2 : Supprimer la charge utile
L'exemple suivant supprime la charge utile de la réponse avec l'élément <Remove>
:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
3 : Modifier la réponse
L'exemple suivant modifie un objet de réponse existant en lui ajoutant un en-tête :
<AssignMessage name="modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" type="response"></AssignTo> </AssignMessage>
Cet exemple ne crée pas de message. À la place, il modifie un message de réponse existant en ajoutant un en-tête HTTP.
Comme cet exemple omet un nom de variable dans l'élément <AssignTo>
et spécifie type
comme "réponse", cette règle modifie l'objet de réponse renvoyé par le serveur cible.
L'en-tête HTTP ajouté au message de réponse par cette règle est dérivé d'une variable renseignée par la règle LookupCache. Par conséquent, le message de réponse modifié par cette règle d'attribution de messages contient un en-tête HTTP qui indique si les résultats ont été extraits du cache ou non. La définition d'en-têtes dans la réponse peut être utile pour le débogage et le dépannage.
4 : Définir un contenu dynamique
Vous pouvez utiliser la règle d'attribution de messages pour intégrer le contenu dynamique dans la charge utile des messages de réponse et de requête.
Pour intégrer des variables de flux Edge dans une charge utile XML, placez la variable désignée entre accolades, comme ceci : {prefix.name}
.
L'exemple suivant intègre la valeur de la variable de flux d'en-tête HTTP user-agent
dans un élément XML appelé User-agent
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Pour les charges utiles JSON, vous pouvez insérer des variables à l'aide des attributs variablePrefix
et variableSuffix
avec des caractères de délimitation, comme illustré dans l'exemple suivant :
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
Pour obtenir une liste complète des variables de flux, reportez-vous à la documentation de référence des variables de flux groupée).
Depuis la version 16.08.17 du cloud, vous pouvez également utiliser des accolades pour insérer des variables.
5 : Supprimer le paramètre de requête
L'exemple suivant supprime le paramètre de requête apikey
de la requête :
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Il est recommandé de supprimer le paramètre de requête apikey
du message de requête lorsque vous utilisez la règle VerifyAPIKey pour l'authentification de l'utilisateur. Cette démarche permet d'empêcher la transmission des informations de clé sensibles à la cible principale.
6 : Définir/obtenir des variables
L'exemple suivant utilise trois règles d'attribution de messages :
- Crée trois variables de flux dans la requête, avec des valeurs statiques.
- Récupère les variables de flux de façon dynamique dans une deuxième règle du flux de requête.
- Les définit dans la charge utile de la réponse.
<!-- Policy #1: Set variables in the request --> <AssignMessage continueOnError="false" enabled="true" name="set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Dans la première règle, l'élément <AssignVariable>
crée et définit trois variables dans la requête. Chaque élément <Name>
spécifie un nom de variable et <Value>
spécifie la valeur.
La deuxième règle utilise l'élément <AssignVariable>
pour lire les valeurs et créer trois variables :
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Dans la seconde règle, l'élément <Ref>
fait référence à la variable source, et les éléments <Name>
spécifient le nom des nouvelles variables. Si la variable référencée par l'élément <Ref>
n'est pas accessible, vous pouvez utiliser la valeur spécifiée par l'élément <Value>
.
Pour essayer ces règles, procédez comme suit :
- Ajoutez les stratégies 1 et 2 au flux de requête. Veillez à placer la règle n° 1 avant la règle n° 2.
- Ajoutez la troisième règle dans le flux response.
- La troisième règle utilise l'élément
<Set>
pour ajouter les variables à la réponse. L'exemple suivant construit une charge utile XML dans la réponse renvoyée par Edge au client :<!-- Policy #3: Add variables to the response --> <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload"> <DisplayName>put-em-in-the-payload</DisplayName> <Set> <Payload contentType="application/xml"> <wrapper> <secret>{secret}</secret> <config> <environment>{environment}</environment> <protocol>{protocol}</protocol> </config> </wrapper> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Notez que la syntaxe permettant d'accéder aux variables de flux dans
<Set>
consiste à les placer entre accolades.Veillez à définir l'attribut
contentType
de l'élément<Payload>
sur "application/xml". - Envoyez une requête à votre proxy d'API. Exemple :
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
Vous pouvez également lier les résultats via un utilitaire tel que
xmllint
pour que le code XML s'affiche dans une structure correctement formatée :curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
Le corps de la réponse doit se présenter comme suit :
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7 : Obtenir les en-têtes de réponse d'appel de service
Dans l'exemple suivant, supposons qu'une règle ServiceCallout figure dans la requête de proxy d'API et que la réponse à l'appel contienne plusieurs en-têtes portant le même nom (Set-Cookie
). En supposant que la variable de réponse de l'appel de service est la valeur par défaut calloutResponse
, la règle suivante récupère la deuxième valeur d'en-tête Set-Cookie
.
<AssignMessage continueOnError="false" enabled="true" name="get-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Pour répertorier toutes les valeurs d'en-tête, utilisez plutôt la variable suivante :
{calloutResponse.header.Set-Cookie.values}
Chaque élément enfant de cette référence comporte des exemples supplémentaires. Pour obtenir d'autres exemples, consultez la section Exemple AssignMessage sur GitHub.
Référence d'élément enfant
Cette section décrit les éléments enfants de <AssignMessage>
.
<Add>
Ajoute des informations à la requête ou à la réponse, spécifiée par l'élément <AssignTo>
.
L'élément <Add>
ajoute les propriétés au message qui n'existent pas dans le message d'origine. Pour modifier les valeurs des propriétés existantes, utilisez l'élément <Set>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Type complexe |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<FormParams> <Headers> <QueryParams> |
L'élément <Add>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Exemple 1
L'exemple suivant utilise l'élément <FormParams>
pour obtenir les valeurs de trois paramètres de chaîne de requête de la requête initiale et les définir en tant que paramètres de formulaire sur la requête de point de terminaison cible :
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Exemple 2
L'exemple suivant utilise l'élément <Headers>
pour ajouter l'en-tête User-Agent
à la requête de point de terminaison cible :
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemple 3
L'exemple suivant utilise l'élément <QueryParams>
pour ajouter à la requête un seul paramètre de requête doté d'une valeur statique :
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Cet exemple utilise <Add>
dans le flux de requêtes. Si vous consultez les résultats dans un outil tel que l'outil de suivi, la requête envoyée à "http://httpbin.org/get" devient "http://httpbin.org/get?myParam=42".
Les éléments enfants de <Add>
acceptent la substitution de chaîne dynamique, appelée modélisation de message.
<FormParams>
(enfant de <Add>
)
Ajoute des paramètres de formulaire au message de requête. Cet élément n'a aucun effet sur le message de réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <FormParam> |
Élément parent |
<Add>
|
Éléments enfants |
<FormParam> |
L'élément <FormParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </Add> </AssignMessage>
Exemple 1
L'exemple suivant ajoute un seul paramètre de formulaire ("answer") et une valeur statique ("42") à la requête :
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"></AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant récupère la valeur du paramètre de chaîne de requête name
et l'ajoute à la requête en tant que paramètre de formulaire :
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> </AssignMessage>
Notez que cet exemple ne spécifie pas de cible avec <AssignTo>
. Cette règle ajoute le paramètre à la requête uniquement.
Exemple 3
L'exemple suivant ajoute plusieurs paramètres de formulaire à la requête :
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Cet exemple récupère les paramètres de chaîne de requête de la requête d'origine et les ajoute en tant que paramètres de formulaire à la requête envoyée au point de terminaison cible.
Vous pouvez utiliser l'outil Trace pour consulter le flux. Le corps de la requête contient les données de formulaire encodées en URL qui ont été initialement transmises en tant que paramètres de chaîne de requête :
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
Vous ne pouvez utiliser <FormParams>
que lorsque les critères suivants sont remplis :
- Verbe HTTP : POST
- Type de message : Requête
- Un des éléments suivants (ou les deux) :
- Données de formulaire : défini sur une valeur ou sur "" (la chaîne vide). Par exemple, avec
curl
, ajoutez-d ""
à votre requête. - En-tête
Content-Length
: défini sur 0 (si aucune donnée ne figure dans la requête d'origine, sinon, la longueur actuelle, en octets). Par exemple, aveccurl
, ajoutez-H "Content-Length: 0"
à votre requête.
- Données de formulaire : défini sur une valeur ou sur "" (la chaîne vide). Par exemple, avec
Exemple :
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
Lorsque vous ajoutez <FormParams>
, Edge définit l'en-tête Content-Type
de la requête sur "application/x-www-form-urlencoded" avant d'envoyer le message au service cible.
<Headers>
(enfant de <Add>
)
Ajoute des en-têtes à la requête ou à la réponse spécifiée, indiquée par l'élément <AssignTo>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <Header> |
Élément parent |
<Add>
|
Éléments enfants |
<Header> |
L'élément <Headers>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
Exemple 1
L'exemple suivant ajoute l'en-tête user-agent
au message de requête et attribue la valeur de la variable de flux request.user.agent
à cet en-tête.
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(enfant de <Add>
)
Ajoute des paramètres de requête à la requête. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <QueryParam> |
Élément parent |
<Add>
|
Éléments enfants |
<QueryParam> |
L'élément <QueryParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Exemple 1
L'exemple suivant ajoute le paramètre de requête "myParam" à la requête et lui attribue la valeur "42" :
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Vous ne pouvez utiliser <QueryParams>
que lorsque les critères suivants sont remplis :
- Verbe HTTP : GET
- Type de message : Requête
De plus, vous ne pouvez définir des paramètres de requête que lorsque l'attribut type
de l'élément <AssignTo>
est un message de requête. Les paramètres définis dans la réponse n'ont aucun effet.
Si vous définissez un tableau de paramètres de requête vide dans votre règle (<Add><QueryParams/></Add>
), celle-ci n'ajoute aucun paramètre de requête. Cela revient à omettre <QueryParams>
.
<AssignTo>
Détermine l'objet sur lequel agit la stratégie AssignMessage. Vous disposez des options suivantes :
- Message de requête : le
request
reçu par le proxy d'API - Message de réponse : le message
response
renvoyé par le serveur cible - Message personnalisé : requête ou objet de réponse personnalisé
Notez que dans certains cas, vous ne pouvez pas modifier l'objet sur lequel agit la règle AssignMessage.
Par exemple, vous ne pouvez pas utiliser <Add>
ou <Set>
pour ajouter ou modifier des paramètres de requête (<QueryParams>
) ou des paramètres de formulaire (<FormParams>
) sur la réponse. Vous ne pouvez manipuler que les paramètres de requête et les paramètres de formulaire sur la requête.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignMessage>
|
Éléments enfants | Aucun |
Si vous ne spécifiez pas <AssignTo>
, la règle agit sur la requête ou la réponse par défaut, qui dépend de l'emplacement d'exécution de la stratégie. Si la règle s'exécute dans le flux de requête, elle a une incidence sur le message de la requête. Si elle s'exécute dans le flux de réponse, la règle affecte par défaut la réponse.
L'élément <AssignTo>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
Exemple 1
L'exemple suivant spécifie que la cible est la requête d'origine qui sera envoyée au point de terminaison cible :
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Si vous définissez createNew
sur "false" (valeur par défaut), cet exemple ne crée pas de requête. Toutes les opérations de cette règle affectent la requête d'origine.
Exemple 2
L'exemple suivant crée un objet de requête :
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Lorsque vous créez un objet de requête ou de réponse, les autres éléments de la règle AssignMessage (tels que <Add>
, <Set>
et <Set>
) agissent sur ce nouvel objet de requête.
Vous pourrez accéder ultérieurement au nouvel objet de requête dans d'autres règles du flux ou envoyer le nouvel objet de requête à un service externe avec une règle ServiceCallout.
Exemple 3
L'exemple suivant crée un objet de requête nommé "MyRequestObject" :
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
Lorsque vous créez un objet de requête ou de réponse, les autres éléments de la règle AssignMessage (tels que <Add>
, <Set>
et <Set>
) agissent sur ce nouvel objet de requête.
Vous pourrez accéder ultérieurement au nouvel objet de requête dans d'autres règles du flux ou envoyer le nouvel objet de requête à un service externe avec une règle ServiceCallout.
Le tableau suivant décrit les attributs de <AssignTo>
:
Attribut | Description | Obligatoire ? | Type |
---|---|---|---|
createNew |
Détermine si cette règle crée un message lors de l'attribution de valeurs. Si la valeur est "true", la règle crée une variable du type spécifié par Si la valeur est "false", la règle répond de l'une des deux manières suivantes :
Si
|
Facultatif | Booléen |
transport |
Spécifie le type de transport pour le type de message de requête ou de réponse. La valeur par défaut est "http" (seule valeur acceptée). |
Facultatif | Chaîne |
type |
Spécifie le type du nouveau message, lorsque createNew est défini sur "true". Les valeurs valides sont "request" ou "response".
La valeur par défaut est "request". Si vous omettez cet attribut, Edge crée une requête ou une réponse, selon l'emplacement du flux exécuté par cette règle. |
Facultatif | Chaîne |
<AssignVariable>
Attribue une valeur à une variable de flux de destination (par exemple, une variable dont la valeur est définie par la règle AssignMessage). Si la variable de flux n'existe pas, <AssignVariable>
la crée.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Type complexe |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<Name> (obligatoire)<Ref> <Template> <Value> |
La valeur que vous attribuez à la variable de flux de destination peut être l'une des suivantes :
- Chaîne littérale : utilisez l'élément enfant
<Value>
pour spécifier une valeur de chaîne littérale pour la variable de flux de destination. - Variable de flux : utilisez l'élément enfant
<Ref>
pour spécifier la valeur d'une variable de flux existante pour la variable de flux de destination. Pour obtenir la liste complète des variables de flux pouvant être utilisées comme source, consultez la documentation de référence sur les variables de flux. - Modèle de message : utilisez l'élément enfant
<Template>
pour spécifier un modèle de message pour la variable de flux de destination.
L'élément <AssignVariable>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Utilisez l'élément <Ref>
pour spécifier la variable source. Si la variable référencée par <Ref>
n'est pas accessible, Edge utilise la valeur spécifiée par l'élément <Value>
. Si vous définissez <Template>
, il est prioritaire sur les autres éléments enfants.
Exemple 1
L'exemple suivant définit la valeur d'une nouvelle variable, myvar
, sur la valeur littérale "42" :
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Exemple 2
L'exemple suivant attribue la valeur de la variable de flux. request.header.user-agent
à la variable de flux de destination myvar
et la valeur du paramètre de requête country
à la variable de flux de destination Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Si l'une des attributions échoue, Edge attribue à la place la valeur "ErrorOnCopy" à la variable de flux de destination.
Si les variables de flux myvar
ou Country
n'existent pas, <AssignVariable>
les crée.
Exemple 3
L'exemple suivant utilise l'élément enfant <Template>
pour concaténer deux variables de contexte avec une chaîne littérale (un trait d'union) entre elles :
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Une utilisation courante de <AssignVariable>
consiste à définir une valeur par défaut pour un paramètre de requête, un en-tête ou une autre valeur pouvant être transmise avec la requête. Pour ce faire, vous pouvez combiner les éléments enfants <Ref>
et <Value>
. Pour en savoir plus, consultez les exemples sur <Ref>
.
<Name>
(enfant de <AssignVariable>
)
Spécifie le nom de la variable de flux de destination (par exemple, la variable dont la valeur est définie par la règle AssignMessage). Si la variable nommée <AssignVariable>
n'existe pas, la règle crée une variable portant ce nom.
Valeur par défaut | N/A |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | Aucun |
L'élément <Name>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
Exemple 1
L'exemple suivant spécifie la variable de destination comme myvar
et la définit sur la valeur littérale "42" :
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Si le fichier myvar
n'existe pas, <AssignVariable>
le crée.
<Ref>
(enfant de <AssignVariable>
)
Spécifie la source de l'attribution en tant que variable de flux. La variable de flux peut être l'une des variables de flux prédéfinies (répertoriées dans la documentation de référence sur les variables de flux) ou une variable de flux personnalisée que vous avez créée.
La valeur de <Ref>
est toujours interprétée comme une variable de flux. Vous ne pouvez pas spécifier de chaîne littérale comme valeur. Pour attribuer une valeur de chaîne littérale, utilisez plutôt l'élément <Value>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | Aucun |
Lorsque vous spécifiez une variable de flux avec <Ref>
, omettez les accolades "{}" que vous utilisez généralement pour référencer une variable de flux. Par exemple, pour définir la valeur de votre nouvelle variable sur la valeur de la variable de flux client.host
, procédez comme suit :
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
Pour définir une valeur par défaut pour la variable de flux de destination, utilisez <Value>
conjointement avec <Ref>
. Si la variable de flux spécifiée par <Ref>
n'existe pas, ne peut pas être lue ou si sa valeur est nulle, Edge attribue la valeur de <Value>
à la variable de flux de destination.
L'élément <Ref>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
Exemple 1
L'exemple suivant attribue la valeur de la variable de flux request.header.user-agent
à la variable de flux de destination myvar
et la valeur du paramètre de requête country
à la variable Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
Dans cet exemple, Edge n'a pas de valeur par défaut (ou valeur de remplacement) spécifiée pour l'une ou l'autre des attributions.
Exemple 2
L'exemple suivant attribue la valeur de la variable de flux request.header.user-agent
à la variable de flux de destination myvar
et la valeur du paramètre de requête country
à la variable Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Dans cet exemple, si les valeurs de la variable de flux request.header.user-agent
ou du paramètre de requête Country
sont NULL, illisibles ou incorrectes, Edge attribue la valeur "ErrorOnCopy" aux nouvelles variables.
Exemple 3
Un cas d'utilisation courant de <AssignVariable>
consiste à définir la valeur par défaut d'un paramètre de requête, d'un en-tête ou d'une autre valeur pouvant être transmise avec la requête. Par exemple, vous créez un proxy d'API météo dans lequel la requête utilise un seul paramètre nommé "w". Ce paramètre contient l'ID de la ville pour laquelle vous souhaitez obtenir la météo. L'URL de la requête prend la forme suivante :
http://myCO.com/v1/weather/forecastrss?w=city_ID
Pour définir une valeur par défaut pour "w", créez une règle AssignMessage comme suit:
<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3"> <AssignTo createNew="false" transport="http" type="request"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignVariable> <Name>request.queryparam.w</Name> <Ref>request.queryparam.w</Ref> <Value>12797282</Value> </AssignVariable> </AssignMessage>
Dans cet exemple, <AssignVariable>
récupère la valeur de request.queryparam.w
et l'attribue à lui-même. Si la valeur de la variable de flux est nulle, ce qui signifie que le paramètre de requête "w" a été omis de la requête, cet exemple utilise la valeur par défaut de l'élément <Value>
. Par conséquent, vous pouvez envoyer une requête à ce proxy d'API qui omet le paramètre de requête "w" :
http://myCO.com/v1/weather/forecastrss
mais renvoie toujours un résultat valide.
Contrairement à <Value>
, la valeur de <Ref>
doit être une variable de flux, telle qu'une propriété d'une request
, response
, ou target
. La valeur peut également être une variable de flux personnalisée que vous avez créée.
Si vous spécifiez une variable de flux qui n'existe pas pour la valeur de <Ref>
et que la valeur de <IgnoreUnresolvedVariables>
est "true", Edge génère une erreur.
<Template>
(enfant de <AssignVariable>
)
Spécifie un modèle de message. Un modèle de message vous permet d'effectuer une substitution de chaîne de variables lors de l'exécution de la règle, et de combiner des chaînes littérales avec des noms de variables placés entre accolades. De plus, les modèles de message sont compatibles avec les fonctions, telles que l'échappement et la conversion de casse.
Utilisez l'attribut ref
pour spécifier une variable de flux dont la valeur est un modèle de message. Par exemple, vous pouvez stocker un modèle de message en tant qu'attribut personnalisé dans une application de développement. Lorsque Edge identifie l'application de développement après avoir validé la clé API ou le jeton de sécurité (via une stratégie supplémentaire), l'élément <AssignVariable>
peut utiliser le modèle de message de l'attribut personnalisé de l'application, qui est disponible en tant que variable de flux à partir de la stratégie de sécurité. L'exemple suivant suppose que le modèle de message est disponible dans un attribut client appelé message_template
sur l'application de développement qui effectue l'appel d'API, où la règle VerifyAPIKey a été utilisée pour valider la clé API de l'application :
<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | Aucun |
L'élément <Template>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
Exemple 1
L'exemple suivant utilise la syntaxe de modélisation de messages pour concaténer deux variables de contexte avec une chaîne littérale (un trait d'union) entre elles :
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Exemple 2
L'exemple suivant spécifie une variable de flux, où la valeur de la variable est un modèle de message prédéfini. Utilisez cette option si vous souhaitez injecter un modèle prédéfini au moment de l'exécution sans avoir à modifier la stratégie :
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Exemple 3
L'exemple suivant spécifie une variable de flux et une valeur textuelle. Dans ce cas, si la variable référencée n'est pas nulle, cette valeur est utilisée comme modèle. Si la valeur référencée est nulle, la valeur de texte (dans ce cas, {system.uuid}-{messageid}
) est utilisée comme modèle. Ce modèle est utile pour fournir une valeur "override", dans les cas où vous souhaitez remplacer le modèle par défaut (la partie texte) par des valeurs définies de manière dynamique. Par exemple, une instruction conditionnelle peut extraire une valeur d'un mappage clé-valeur et définir la variable référencée sur cette valeur :
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(enfant de <AssignVariable>
)
Définit la valeur de la variable de flux de destination définie avec <AssignVariable>
. La valeur est toujours interprétée comme une chaîne littérale. Vous ne pouvez pas utiliser une variable de flux comme valeur, même si vous la placez entre accolades ("{}"). Pour utiliser une variable de flux, utilisez plutôt <Ref>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | Aucun |
Utilisé conjointement avec l'élément <Ref>
, <Value>
sert de valeur par défaut (ou de remplacement). Si <Ref>
n'est pas spécifié, ne peut pas être résolu ou si sa valeur est nulle, la valeur de <Value>
est utilisée.
L'élément <Value>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Exemple 1
L'exemple suivant définit la valeur de la variable de flux de destination, myvar
, sur la valeur littérale "42" :
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Exemple 2
L'exemple suivant attribue la valeur de la variable de flux request.header.user-agent
à la variable de flux myvar
et la valeur du paramètre de requête country
à la variable Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Si l'une des attributions échoue, <AssignVariable>
attribue à la place la valeur "ErrorOnCopy" à la variable de flux de destination.
<Copy>
Copie les valeurs à partir du message spécifié par l'attribut source
vers le message spécifié par l'élément <AssignTo>
. Si vous ne spécifiez pas de cible avec <AssignTo>
, cette règle copie les valeurs dans la requête ou la réponse, selon l'emplacement du flux qu'elle exécute.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
L'élément <Copy>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
<!-- Can also be an empty array (<Headers/>) -->
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
<ReasonPhrase>[false|true]</ReasonPhrase>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
Exemple 1
L'exemple suivant copie un en-tête, trois paramètres de formulaire, le chemin d'accès et tous les paramètres de requête depuis la requête vers une nouvelle requête personnalisée :
<AssignMessage continueOnError="false" enabled="true" name="copy-1"> <Copy source="request"> <Headers> <Header name="Header_Name_1">Header value 1</Header> </Headers> <FormParams> <FormParam name="Form_Param_Name_1">Form param value 1</FormParam> <FormParam name="Form_Param_Name_2">Form param value 1</FormParam> <FormParam name="Form_Param_Name_3">Form param value 1</FormParam> </FormParams> <Payload>false</Payload> <Path>true</Path> <QueryParams/> <ReasonPhrase>false</ReasonPhrase> <StatusCode>false</StatusCode> <Verb>false</Verb> <Version>false</Version> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
L'élément <Copy>
possède les attributs suivants :
Attribut | Description | Obligatoire ? | Type |
---|---|---|---|
source |
Spécifie l'objet source de la copie.
|
Facultatif | Chaîne |
<FormParams>
(enfant de <Copy>
)
Copie les paramètres de formulaire de la requête spécifiée par l'attribut source
de l'élément <Copy>
vers la requête spécifiée par <AssignTo>
. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <FormParam> ou tableau vide |
Élément parent |
<Copy>
|
Éléments enfants |
<FormParam> |
L'élément <FormParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant copie un seul paramètre de formulaire de la requête vers la requête personnalisée "MyCustomRequest" :
<AssignMessage name="copy-formparams-1"> <Copy source="request"> <FormParams> <FormParam name="paramName">Form param value 1</FormParam> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant copie tous les paramètres de formulaire dans la requête personnalisée "MyCustomRequest" :
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemple 3
L'exemple suivant copie trois paramètres de formulaire dans la requête personnalisée "MyCustomRequest" :
<AssignMessage name="copy-formparams-3"> <Copy source="request"> <FormParams> <FormParam name="paramName1"/> <FormParam name="paramName2"/> <FormParam name="paramName3"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemple 4
S'il existe plusieurs paramètres de formulaire du même nom, utilisez la syntaxe suivante :
<AssignMessage name="copy-formparams-4"> <Copy source="request"> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Cet exemple copie "f1", "f2" et la deuxième valeur de "f3". Si "f3" ne comporte qu'une seule valeur, le paramètre n'est pas copié.
Vous ne pouvez utiliser <FormParams>
que lorsque les critères suivants sont remplis :
- Verbe HTTP : POST
- Type de message : réponse
- Un des éléments suivants (ou les deux) :
- Données de formulaire : défini sur une valeur ou sur "" (la chaîne vide). Par exemple, avec
curl
, ajoutez-d ""
à votre requête. - En-tête
Content-Length
:défini sur 0 (si aucune donnée ne figure dans la requête d'origine, sinon, la longueur actuelle). Par exemple, aveccurl
, ajoutez-H "Content-Length: 0"
à votre requête.
- Données de formulaire : défini sur une valeur ou sur "" (la chaîne vide). Par exemple, avec
Lorsque vous copiez <FormParams>
, <Copy>
définit le Content-Type
du message sur "application/x-www-form-urlencoded" avant de l'envoyer au service cible.
<Headers>
(enfant de <Copy>
)
Copie les en-têtes HTTP à partir du message de requête ou de réponse spécifié par l'attribut source
de l'élément <Copy>
vers le message de requête ou de réponse spécifié par l'élément <AssignTo>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <Header> ou tableau vide |
Élément parent |
<Copy>
|
Éléments enfants |
<Header> |
L'élément <Headers>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant copie l'en-tête user-agent
de la requête dans le nouvel objet de requête personnalisé :
<AssignMessage name="copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemple 2
Pour copier tous les en-têtes, utilisez un élément <Headers>
vide, comme le montre l'exemple suivant :
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemple 3
S'il existe plusieurs en-têtes portant le même nom, utilisez la syntaxe suivante :
<AssignMessage name="copy-headers-3"> <Copy source="request"> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Cet exemple copie "h1", "h2" et la deuxième valeur de "h3". Si "h3" n'a qu'une seule valeur, le paramètre n'est pas copié.
<Path>
(enfant de <Copy>
)
Détermine si le chemin d'accès doit être copié de la requête source vers la requête de destination. Cet élément n'a aucun effet sur une réponse.
Si la valeur est "true", cette règle copie le chemin d'accès à partir du message de requête spécifié par l'attribut source
de l'élément <Copy>
vers le message de requête spécifié par l'élément <AssignTo>
.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Copy>
|
Éléments enfants | Aucun |
L'élément <Path>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant indique que la règle AssignMessage doit copier le chemin d'accès de la requête source vers le nouvel objet de requête personnalisé:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <Path>
que lorsque les critères suivants sont remplis :
- Type de message : Requête
<Payload>
(enfant de <Copy>
)
Détermine si la charge utile doit être copiée depuis la source vers la destination. La source et la destination peuvent être des requêtes ou des réponses.
Si la valeur est "true", cette règle copie la charge utile depuis le message spécifié par l'attribut source
de l'élément <Copy>
vers le message spécifié par l'élément <AssignTo>
.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Copy>
|
Éléments enfants | Aucun |
L'élément <Payload>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <Payload>
sur "true" afin que la charge utile de la requête soit copiée depuis la requête vers la réponse :
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(enfant de <Copy>
)
Copie les paramètres de chaîne de requête depuis la requête spécifiée par l'attribut source
de l'élément <Copy>
vers la requête spécifiée par l'élément <AssignTo>
. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <QueryParam> ou tableau vide |
Élément parent |
<QueryParam>
|
Éléments enfants | Aucun |
L'élément <QueryParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant copie le paramètre de requête "my_param" de la requête vers un nouvel objet de requête personnalisé :
<AssignMessage name="copy-queryparams-1"> <Copy source="request"> <QueryParams> <QueryParam name="my_param"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant copie tous les paramètres de requête depuis la requête vers un nouvel objet de requête personnalisé :
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemple 3
S'il existe plusieurs paramètres de requête portant le même nom, utilisez la syntaxe suivante
<AssignMessage name="copy-queryparams-3"> <Copy source="request"> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Cet exemple copie "qp1", "qp2" et la deuxième valeur de "qp3". Si "qp3" n'a qu'une seule valeur, le paramètre n'est pas copié.
Vous ne pouvez utiliser <QueryParams>
que lorsque les critères suivants sont remplis :
- Verbe HTTP : GET
- Type de message : Requête
<ReasonPhrase>
(enfant de <Copy>
)
Détermine si l'expression de motif doit être copiée depuis la réponse source vers la réponse de destination. Cet élément n'a aucun effet sur une requête.
Si la valeur est "true", cette règle copie l'élément ReasonPhrase
depuis la réponse spécifiée par l'attribut source
de l'élément <Copy>
vers la réponse spécifiée par l'élément <AssignTo>
.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Copy>
|
Éléments enfants | Aucun |
L'élément <ReasonPhrase>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <ReasonPhrase>
sur "true", ce qui amène <Copy>
à copier l'expression de motif depuis la réponse par défaut vers un objet de réponse personnalisé :
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <ReasonPhrase>
que lorsque les critères suivants sont remplis :
- Type de message : réponse
<StatusCode>
(enfant de <Copy>
)
Détermine si le code d'état est copié de la réponse source vers la réponse de destination. Cet élément n'a aucun effet sur une requête.
Si la valeur est "true", cette règle copie le code d'état depuis le message de réponse spécifié par l'attribut source
de l'élément <Copy>
vers le message de réponse spécifié par l'élément <AssignTo>
.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Copy>
|
Éléments enfants | Aucun |
L'élément <StatusCode>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <StatusCode>
sur "true", qui copie le code d'état depuis l'objet de réponse par défaut vers un nouvel objet de réponse personnalisé :
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <StatusCode>
que lorsque les critères suivants sont remplis :
- Type de message : réponse
Une utilisation courante de <StatusCode>
consiste à s'assurer que la réponse du proxy a le même état que la réponse reçue de la cible lorsque l'attribut createNew
de l'élément <AssignTo>
est défini sur "true".
<Verb>
(enfant de <Copy>
)
Détermine si le verbe HTTP est copié depuis la requête source vers la requête de destination. Cet élément n'a aucun effet sur une réponse.
Si la valeur est "true", copie le verbe trouvé dans l'attribut source
de l'élément <Copy>
vers la requête spécifiée dans l'élément <AssignTo>
.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Copy>
|
Éléments enfants | Aucun |
L'élément <Verb>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <Verb>
sur "true", qui copie le verbe depuis la requête par défaut vers une nouvelle requête personnalisée :
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <Verb>
que lorsque les critères suivants sont remplis :
- Type de message : Requête
<Version>
(enfant de <Copy>
)
Détermine si la version HTTP est copiée de la requête source vers la requête de destination. Cet élément n'a aucun effet sur une réponse.
Si la valeur est "true", copie la version HTTP trouvée dans l'attribut source
de l'élément <Copy>
dans l'objet spécifié par l'élément <AssignTo>
.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Copy>
|
Éléments enfants | Aucun |
L'élément <Version>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <Version>
sur "true" dans la requête, qui copie la version depuis l'objet de requête par défaut vers un nouvel objet de requête personnalisé :
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <Version>
que lorsque les critères suivants sont remplis :
- Type de message : Requête
<DisplayName>
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, more natural-sounding name.
The <DisplayName>
element is common to all policies.
Default Value | n/a |
Required? | Optional. If you omit <DisplayName> , the value of the
policy's name attribute is used |
Type | String |
Parent Element | <PolicyElement> |
Child Elements | None |
The <DisplayName>
element uses the following syntax:
Syntax
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Example
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
The <DisplayName>
element has no attributes or child elements.
<IgnoreUnresolvedVariables>
Détermine si le traitement s'arrête lorsqu'une variable non résolue est rencontrée.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<AssignMessage>
|
Éléments enfants | Aucun |
Définissez la valeur sur true
pour ignorer les variables non résolues et poursuivre le traitement, sinon false
. La valeur par défaut est false
.
Définir <IgnoreUnresolvedVariables>
sur true
n'a pas le même objet que définir l'élément continueOnError
de <AssignMessage>
sur true
, car il est spécifique à la définition et à l'obtention de valeurs de variables. Si vous définissez continueOnError
sur true
, Edge ignore toutes les erreurs, pas seulement celles rencontrées lors de l'utilisation de variables.
L'élément <IgnoreUnresolvedVariables>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
Exemple 1
L'exemple suivant définit <IgnoreUnresolvedVariables>
sur "true" :
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
Supprime les en-têtes, les paramètres de requête, les paramètres de formulaire et/ou la charge utile d'un message. Le message peut être une requête ou une réponse. Vous pouvez spécifier le message sur lequel agit <Remove>
en utilisant l'élément <AssignTo>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Type complexe |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<FormParams> <Headers> <Payload> <QueryParams> |
Un cas d'utilisation courant de <Remove>
consiste à supprimer un paramètre de requête contenant des informations sensibles de l'objet de requête entrant afin d'éviter de le transmettre au serveur backend.
L'élément <Remove>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant supprime le corps du message de la réponse :
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Dans le flux de réponse, cette stratégie supprime le corps de la réponse, ne renvoyant que les en-têtes HTTP au client.
Exemple 2
L'exemple suivant supprime tous les paramètres de formulaire et un paramètre de requête de la requête entrante :
<AssignMessage continueOnError="false" enabled="true" name="remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<FormParams>
(enfant de <Remove>
)
Supprime les paramètres de formulaire spécifiés de la requête. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <FormParam> ou tableau vide |
Élément parent |
<Remove>
|
Éléments enfants |
<FormParam> |
L'élément <FormParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant supprime trois paramètres de formulaire de la requête :
<AssignMessage name="remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Exemple 2
L'exemple suivant supprime tous les paramètres de formulaire de la requête :
<AssignMessage name="remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Exemple 3
S'il existe plusieurs paramètres de formulaire du même nom, utilisez la syntaxe suivante :
<AssignMessage name="remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Cet exemple supprime "f1", "f2" et la deuxième valeur de "f3". Si "f3" n'a qu'une seule valeur, le paramètre n'est pas supprimé.
Vous ne pouvez utiliser <FormParams>
que lorsque les critères suivants sont remplis :
- Type de message : Requête
Content-Type
: "application/x-www-form-urlencoded"
<Headers>
(enfant de <Remove>
)
Supprime les en-têtes HTTP spécifiés de la requête ou de la réponse, indiquée par l'élément <AssignTo>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <Header> ou tableau vide |
Élément parent |
<Remove>
|
Éléments enfants |
<Header> |
L'élément <Headers>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant supprime l'en-tête user-agent
de la requête :
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemple 2
L'exemple suivant supprime tous les en-têtes de la requête :
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemple 3
S'il existe plusieurs en-têtes portant le même nom, utilisez la syntaxe suivante :
<AssignMessage name="remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Cet exemple supprime "h1", "h2" et la deuxième valeur de "h3" de la requête. Si "h3" n'a qu'une seule valeur, le paramètre n'est pas supprimé.
<Payload>
(enfant de <Remove>
)
Détermine si <Remove>
supprime la charge utile dans la requête ou la réponse, spécifiée par l'élément <AssignTo>
. Défini sur "true" pour effacer la charge utile, sinon "false". La valeur par défaut est "false".
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Remove>
|
Éléments enfants | Aucun |
L'élément <Payload>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant définit <Payload>
sur "true" pour que la charge utile de la requête soit effacée :
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(enfant de <Remove>
)
Supprime les paramètres de requête spécifiés de la requête. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <QueryParam> ou tableau vide |
Élément parent |
<Remove>
|
Éléments enfants |
<QueryParam> |
L'élément <QueryParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant permet de supprimer un seul paramètre de requête de la requête :
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemple 2
L'exemple suivant supprime tous les paramètres de la requête :
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemple 3
S'il existe plusieurs paramètres de requête portant le même nom, utilisez la syntaxe suivante
<AssignMessage name="remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Cet exemple supprime "qp1", "qp2" et la deuxième valeur de "qp3" de la requête. Si "qp3" n'a qu'une seule valeur, le paramètre n'est pas supprimé.
Exemple 4
L'exemple suivant supprime le paramètre de requête apikey
de la requête :
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Vous ne pouvez utiliser <QueryParams>
que lorsque les critères suivants sont remplis :
- Verbe HTTP : GET
- Type de message : Requête
<Set>
Définit les informations dans le message de requête ou de réponse, spécifié par l'élément <AssignTo>
. <Set>
écrase les en-têtes ou les paramètres déjà présents dans le message d'origine. Pour créer un en-tête ou un paramètre, utilisez l'élément <Add>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Type complexe |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
L'élément <Set>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Exemple 1
L'exemple suivant montre l'élément <Set>
:
<AssignMessage continueOnError="false" enabled="true" name="set-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> <QueryParams> <QueryParam name="name">{request.header.name}</QueryParam> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> <!-- <Verb>GET</Verb> --> <Payload contentType="text/plain">42</Payload> <Path/> <ReasonPhrase>Bad request</ReasonPhrase> <StatusCode>400</StatusCode> <Verb>POST</Verb> <Verb>{my_variable}</Verb> <Version>1.1</Version> </Set> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<FormParams>
(enfant de <Set>
)
Remplace les paramètres de formulaire existants sur une requête et les remplace par les nouvelles valeurs que vous spécifiez avec cet élément. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <FormParam> |
Élément parent |
<Set>
|
Éléments enfants |
<FormParam> |
L'élément <FormParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit un paramètre de formulaire appelé "myparam" sur la valeur de la variable request.header.myparam
dans une nouvelle requête personnalisée :
<AssignMessage name="set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <FormParams>
que lorsque les critères suivants sont remplis :
- Verbe HTTP : POST
- Type de message : Requête
Si vous définissez des paramètres de formulaire vides dans votre règle (<Add><FormParams/></Add>
), celle-ci n'ajoute aucun paramètre de formulaire. Cela revient à omettre le paramètre <FormParams>
.
<Set>
remplace le message Content-Type
par "application/x-www-form-urlencoded" avant de l'envoyer au point de terminaison cible.
<Headers>
(enfant de <Set>
)
Remplace les en-têtes HTTP existants dans la requête ou la réponse, qui est spécifiée par l'élément <AssignTo>
.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <Header> |
Élément parent |
<Set>
|
Éléments enfants |
<Header> |
L'élément <Headers>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit l'en-tête user-agent
sur la valeur de la variable request.header.user-agent
:
<AssignMessage name="set-headers-1"> <Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Si vous définissez des en-têtes vides dans votre stratégie (<Add><Headers/></Add>
), la règle n'ajoute aucun en-tête. Cela revient à omettre <Headers>
.
<Path>
(enfant de <Set>
)
<Payload>
(enfant de <Set>
)
Définit le corps du message pour une requête ou une réponse, spécifiée par l'élément <AssignTo>
. La charge utile peut être n'importe quel type de contenu valide, tel que du texte brut, JSON ou XML.
Valeur par défaut | chaîne vide |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<Set>
|
Éléments enfants | Aucun |
L'élément <Payload>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit une charge utile en texte brut :
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Exemple 2
L'exemple suivant définit une charge utile JSON :
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
Exemple 3
L'exemple suivant insère des valeurs de variables dans la charge utile en plaçant les noms de variables entre accolades :
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
Dans les anciennes versions d'Apigee Edge, par exemple avant la version du cloud 16.08.17, vous ne pouviez pas utiliser les accolades pour désigner des références de variables dans les charges utiles JSON. Dans ces versions, vous deviez utiliser les attributs variablePrefix
et variableSuffix
pour spécifier des caractères de délimitation, et les utiliser pour encapsuler les noms de variables, comme ceci :
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
Cette ancienne syntaxe fonctionne toujours.
Exemple 4
Le contenu de <Payload>
est traité comme un modèle de message. Cela signifie que la règle AssignMessage remplace les variables placées entre accolades par la valeur des variables référencées lors de l'exécution.
L'exemple suivant utilise la syntaxe avec accolades pour définir une partie de la charge utile sur une valeur de variable :
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
Le tableau suivant décrit les attributs de <Payload>
:
Attribut | Description | Présence | Type |
---|---|---|---|
contentType |
Si elle est spécifiée, la valeur de |
Facultatif | Chaîne |
variablePrefix |
Spécifie éventuellement le délimiteur de début sur une variable de flux. La valeur par défaut est "{". Pour en savoir plus, consultez la documentation de référence sur les variables de flux. | Facultatif | Caractère |
variableSuffix |
Spécifie éventuellement le délimiteur final à une variable de flux. La valeur par défaut est "}". Pour plus d'informations, consultez la documentation de référence sur les variables de flux. | Facultatif | Caractère |
<QueryParams>
(enfant de <Set>
)
Remplace les paramètres de requête existants dans la requête par de nouvelles valeurs. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Tableau d'éléments <QueryParam> |
Élément parent |
<Set>
|
Éléments enfants |
<QueryParam> |
L'élément <QueryParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit le paramètre de requête "address" sur la valeur de la variable request.header.address
:
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Vous ne pouvez utiliser <QueryParams>
que lorsque les critères suivants sont remplis :
- Verbe HTTP : GET
- Type de message : Requête
Si vous définissez des paramètres de requête vides dans votre règle (<Set><QueryParams/></Set>
), celle-ci ne définit aucun paramètre de requête. Cela revient à omettre <QueryParams>
.
<ReasonPhrase>
(enfant de <Set>
)
Définit l'expression de motif sur la réponse. Cela est normalement effectué pour le débogage en association avec <StatusCode>
. Cet élément n'a aucun effet sur une requête.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<Set>
|
Éléments enfants | Aucun |
L'élément <ReasonPhrase>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit une expression de motif simple :
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Exemple 2
Le contenu de <ReasonPhrase>
est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades est remplacé lors de l'exécution par la valeur de la variable référencée, comme le montre l'exemple suivant :
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Vous ne pouvez utiliser <ReasonPhrase>
que lorsque les critères suivants sont remplis :
- Type de message : réponse
<StatusCode>
(enfant de <Set>
)
Définit le code d'état sur la réponse. Cet élément n'a aucun effet sur une requête.
Valeur par défaut | '200' (lorsque l'attribut createNew de l'élément <AssignTo> est défini sur "true") |
Obligatoire ? | Facultatif |
Type | Chaîne ou variable |
Élément parent |
<Set>
|
Éléments enfants | Aucun |
L'élément <StatusCode>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit un code d'état simple :
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Exemple 2
Le contenu de <StatusCode>
est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades est remplacé par la valeur de la variable référencée lors de l'exécution, comme illustré dans l'exemple suivant :
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Vous ne pouvez utiliser <StatusCode>
que lorsque les critères suivants sont remplis :
- Type de message : réponse
<Verb>
(enfant de <Set>
)
Définit le verbe HTTP sur la requête. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne ou variable |
Élément parent |
<Set>
|
Éléments enfants | Aucun |
L'élément <Verb>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit un verbe simple sur la requête :
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Exemple 2
Le contenu de <Verb>
est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades sera remplacé au moment de l'exécution par la valeur de la variable référencée.
L'exemple suivant utilise une variable pour renseigner un verbe :
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Vous ne pouvez utiliser <Verb>
que lorsque les critères suivants sont remplis :
- Type de message : Requête
<Version>
(enfant de <Set>
)
Définit la version HTTP sur une requête. Cet élément n'a aucun effet sur une réponse.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne ou variable |
Élément parent |
<Set>
|
Éléments enfants | Aucun |
L'élément <Version>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Exemple 1
L'exemple suivant définit le numéro de version sur "1.1" :
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Exemple 2
La variable suivante utilise une variable entre accolades pour définir le numéro de version :
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Le contenu de <Version>
est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades sera remplacé lors de l'exécution par la valeur de la variable référencée.
Vous ne pouvez utiliser <Version>
que lorsque les critères suivants sont remplis :
- Type de message : Requête
Créer des messages de requête personnalisés
La règle AssignMessage vous permet de créer un message de requête personnalisé. Après avoir créé une requête personnalisée, vous pouvez l'utiliser de la manière suivante :
- Accéder à ses variables dans d'autres règles
- La transmettre à un service externe
Pour créer un message de requête personnalisé, utilisez l'élément <AssignTo>
dans votre règle AssignMessage. Définissez createNew
sur "true" et spécifiez le nom du nouveau message dans le corps de l'élément, comme le montre l'exemple suivant :
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Par défaut, Edge n'effectue aucune action par rapport au message de requête personnalisé. Une fois créé, Edge poursuit le flux avec la requête d'origine. Pour utiliser la requête personnalisée, ajoutez à votre proxy une règle telle que la règle ServiceCallout pouvant transmettre la requête personnalisée à un service externe.
Les exemples suivants créent des messages de requête personnalisés :
Exemple 1
L'exemple suivant crée un objet de requête personnalisé avec la règle d'attribution de messages :
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Cet exemple :
- Crée un objet de message de requête appelé "MyCustomRequest".
- Sur MyCustomRequest, cette règle :
- Copie la valeur de l'en-tête HTTP
user-agent
depuis la requête entrante vers le nouveau message. Comme<Copy>
utilise une référence absolue à la variable de fluxuser-agent
, il n'est pas nécessaire de spécifier l'attributsource
dans<Copy>
. - Définit le paramètre de requête
address
du message personnalisé sur la valeur du paramètre de requêteaddy
de la requête entrante. - Définit le verbe HTTP sur
GET
.
- Copie la valeur de l'en-tête HTTP
- Définit
<IgnoreUnresolvedVariables>
sur "false". Lorsque la valeur de<IgnoreUnresolvedVariables>
est "false", si l'une des variables que la règle tente d'ajouter n'existe pas, Edge interrompt le traitement dans le flux d'API.
Exemple 2
Voici un autre exemple illustrant la création d'un objet de requête personnalisé avec la règle d'attribution de messages :
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
Cet exemple crée une requête personnalisée appelée "partner.request". Il définit ensuite <Verb>
et <Payload>
sur la nouvelle requête.
Vous pouvez accéder à un message de requête personnalisé dans une autre règle AssignMessage qui intervient ultérieurement dans le flux. L'exemple suivant récupère la valeur de l'en-tête user-agent
du message de requête personnalisé :
<AssignMessage name="custom-request-1-access"> <DisplayName>custom-request-1-access</DisplayName> <AssignTo createNew="false" type="request"></AssignTo> <Set> <Headers> <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header> </Headers> </Set> </AssignMessage>
Vidéos
Regardez les vidéos suivantes pour en savoir plus sur la règle AssignMessage.
Vidéo | Description |
---|---|
Pourquoi utiliser la règle d'attribution de messages | Découvrez les avantages de la règle AssignMessage pour modifier la requête ou la réponse API sans modifier le code du backend. |
Copier des éléments d'API à l'aide de la règle AssignMessage | Copiez des éléments à partir d'une requête ou d'une réponse d'API, puis créez une nouvelle requête ou un objet de réponse à l'aide de la règle AssignMessage. |
Supprimer des éléments d'API à l'aide de la règle AssignMessage | Supprimez des éléments d'API et modifiez l'API avant qu'elle atteigne le backend cible à l'aide de la règle AssignMessage. |
Ajouter et définir des éléments d'API à l'aide de la règle AssignMessage | Modifiez la requête ou la réponse de l'API en ajoutant des paramètres de requête, des en-têtes, des paramètres de formulaire ou des charges utiles à l'aide de la règle AssignMessage. |
Créer des variables personnalisées à l'aide de la règle AssignMessage | Définissez des variables de flux personnalisées à l'aide de la règle AssignMessage et exploitez les variables d'autres règles dans le proxy d'API. |
Créer des objets de requête ou de réponse à l'aide de la règle AssignMessage | Créez des objets de requête ou de réponse d'API à l'aide de la règle AssignMessage au moment de l'exécution de l'API. |
Créer une API fictive à l'aide de la règle AssignMessage | Créez une simple API REST fictive en ajoutant la règle AssignMessage dans le flux de réponse. |
Définir ou modifier la charge utile à l'aide de la règle AssignMessage | Convertissez la requête REST en requête SOAP en définissant la charge utile SOAP à l'aide de la règle AssignMessage au moment de l'exécution de l'API. |
Codes d'erreur
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | The policy was not able to set a variable. See the fault string for the name of the unresolved variable. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
This error occurs if the Message type variables represent entire HTTP requests and responses. The built-in Edge
flow variables |
build |
steps.assignmessage.UnresolvedVariable |
500 |
This error occurs if a variable specified in the Assign Message policy is either:
|
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidIndex |
If the index specified in the <Copy> and/or <Remove> elements of the Assign Message
policy is 0 or a negative number, then deployment of the API Proxy fails.
|
build |
InvalidVariableName |
If the child element <Name> is empty or not specified in the <AssignVariable> element,
then the deployment of the API proxy fails because there is no valid variable name to
which to assign a value. A valid variable name is required.
|
build |
InvalidPayload |
A payload specified in the policy is invalid. |
Fault variables
These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | assignmessage.AM-SetResponse.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Example fault rule
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
Schémas
Chaque type de règle est défini par un schéma XML (.xsd
). Pour référence, des schémas de règles sont disponibles sur GitHub.
Articles associés
Des exemples fonctionnels de la règle AssignMessage sont disponibles dans les exemples de la plate-forme d'API.
Pour obtenir un exemple plus détaillé sur la manière de remplacer target.url
dans ProxyEndpoint, consultez cet article de la communauté Apigee.
Pour voir un "chemin d'accès" en action dans une règle ServiceCallout, consultez cet exemple pratique dans les exemples Apigee sur GitHub. Il vous suffit de cloner le dépôt et de suivre les instructions de cet article. L'exemple utilise la règle AssignMessage pour définir un chemin de requête, puis une règle Service Callout pour envoyer la requête à un service externe.