Cette page s'applique à Apigee et à Apigee hybrid.
Consultez la documentation d'Apigee Edge.
Objet
La règle AssignMessage peut modifier un message de requête ou de réponse existant, ou créer un nouveau message de requête ou de réponse dans le cadre d'un flux de 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 des charges utiles de message d'un message
- Définir la valeur des propriétés existantes dans un message.
AssignMessage vous permet également de définir des variables de contexte arbitraires, indépendamment des opérations ci-dessus qui peuvent s'appliquer à un message.
Avec le paramètre AssignMessage, vous pouvez ajouter, modifier ou supprimer les propriétés de la requête ou de la réponse. 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.
Cette règle est une règle extensible et son utilisation peut avoir des conséquences sur le coût ou l'utilisation, en fonction de votre licence Apigee. Pour en savoir plus sur les types de règles et les implications en termes d'utilisation, consultez la section Types de règles.
La règle AssignMessage peut créer ou modifier des variables de flux avec les éléments enfants suivants :
L'ordre dans lequel vous organisez les éléments <Add>
, <Copy>
, <Set>
et <Remove>
sont importants. La règle exécute ces actions dans l'ordre dans lequel elles apparaissent dans la configuration de la règle. Si vous devez supprimer tous les en-têtes, puis définir un en-tête spécifique, vous devez inclure l'élément <Remove>
avant l'élément <Set>
.
É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 | ND |
É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> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> <Value>VARIABLE_VALUE</Value> </AssignVariable> <Copy source="VARIABLE_NAME"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</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> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</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> <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 d'Apigee :
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <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'Apigee, 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.
Cet élément possède les attributs suivants qui sont communs à toutes les règles :
Attribut | Par défaut | Obligatoire ? | Description |
---|---|---|---|
name |
ND | Obligatoire |
Nom interne de la règle. La valeur de l'attribut Vous pouvez également utiliser l'élément |
continueOnError |
faux | Facultatif | Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles. Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle. Voir aussi :
|
enabled |
true | Facultatif | Définissez sur true pour appliquer la règle. Définissez sur false pour désactiver la règle. La règle ne sera pas appliquée même si elle reste associée à un flux. |
async |
faux | Obsolète | Cet attribut est obsolète. |
Le tableau suivant fournit une description détaillée des éléments enfants de <AssignMessage>
:
Élément enfant | Requis ? | Description |
---|---|---|
Opérations courantes | ||
<Add> |
Facultatif | Ajoute des informations à l'objet message spécifié par l'élément <AssignTo> .
Pour écraser des en-têtes ou des paramètres existants, utilisez l'élément |
<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 name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
2 : Supprimer la charge utile
L'exemple suivant supprime la charge utile de la réponse avec l'élément <Remove>
:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </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="AM-modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo>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 spécifie response
comme nom de variable dans l'élément <AssignTo>
, cette règle modifie l'objet de réponse initialement défini avec les données renvoyées 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 AssignMessage 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 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="AM-set-dynamic-content"> <AssignTo>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).
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="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </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 AssignMessage :
- 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 name="AM-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> </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>
surapplication/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 name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
Pour répertorier toutes les valeurs d'en-tête, utilisez plutôt la variable suivante :
{calloutResponse.header.Set-Cookie.values}
8 : Stocker et supprimer les paramètres de formulaire, les en-têtes et les paramètres de requête
Si vous souhaitez utiliser <Remove>
pour supprimer vos en-têtes, vos paramètres de requête ou vos paramètres de formulaire, mais conserver l'accès à leurs valeurs plus tard dans le flux de règles, vous pouvez stocker leurs valeurs à l'aide de <AssignVariable>
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-StoreAndRemove"> <DisplayName>AM-StoreAndRemove</DisplayName> <AssignVariable> <Name>var_grant_type</Name> <Ref>request.formparam.grant_type</Ref> </AssignVariable> <Remove> <Headers/> <FormParams/> <Payload/> </Remove> <Set> <Headers> <Header name="Content-Type">application/x-www-form-urlencoded</Header> <Header name="Accept">application/json</Header> <Header name="Grant-Type">{var_grant_type}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
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. Notez que <Set>
fournit également cette fonctionnalité. Pour modifier les valeurs des propriétés existantes, utilisez l'élément <Set>
.
Valeur par défaut | ND |
Requis ? | 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 name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant utilise l'élément <Headers>
pour ajouter un en-tête partner-id
à la requête qui sera envoyée au point de terminaison cible :
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </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 name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Cet exemple utilise <Add>
dans le flux de requêtes. Si vous consultez les résultats dans un outil tel que la présentation de Debug, la requête envoyée à https://example-target.com/get
devient https://example-target.com/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 | ND |
Requis ? | 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 name="AM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant récupère la valeur du paramètre de requête name
et l'ajoute à la requête en tant que paramètre de formulaire, puis le supprime :
<AssignMessage name="AM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> <Remove> <QueryParam name="name"/> </Remove> </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 name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </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 avec des noms différents. Ensuite, les paramètres de requête d'origine sont supprimés. Apigee envoie la requête modifiée au point de terminaison cible.
Vous pouvez utiliser la page Présentation de Debug 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 :
username=nick&zip_code=90210&default_language=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>
, Apigee 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 | ND |
Requis ? | 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 un en-tête partner-id
au message de requête et attribue la valeur de la variable de flux verifyapikey.VAK-1.developer.app.partner-id
à cet en-tête.
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </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 | ND |
Requis ? | 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 name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <QueryParams>
que lorsque les critères suivants sont remplis :
- Verbes HTTP :
GET
,POST
,PATCH
,DELETE
- 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 | ND |
Requis ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignMessage>
|
Éléments enfants | Aucun |
Si vous ne spécifiez pas <AssignTo>
, ou si vous spécifiez l'élément <AssignTo>
, mais ne spécifiez pas de valeur textuelle pour l'élément, la règle agit sur la requête ou la réponse par défaut, à savoir : en fonction de l'emplacement d'exécution de la règle. 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 ne spécifie aucun message dans le texte du <AssignTo>
. Cela implique que la règle agira sur le message request
ou response
, selon l'emplacement où la règle s'exécute.
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> <!-- no-op --> ... </AssignMessage>
Si vous spécifiez createNew="false"
et que vous ne fournissez pas explicitement de nom de message, les autres attributs de <AssignTo>
ne sont pas pertinents. Dans ce cas, vous pouvez omettre complètement l'élément <AssignTo>
.
Exemple 2
L'exemple suivant crée un objet de requête, en remplaçant l'objet existant :
<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 <Copy>
) 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 <Copy>
) 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 | nécessaire | Type |
---|---|---|---|
createNew |
Détermine si cette règle crée un message lors de l'attribution de valeurs. Si la valeur est Si la valeur est
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 |
Facultatif | Chaîne |
type |
Indique 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 |
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. Vous pouvez utiliser plusieurs éléments AssignVariable au sein de la règle AssignMessage. Ils sont exécutés dans leur ordre d'apparition au sein de la configuration de la règle.
Valeur par défaut | ND |
Requis ? | Facultatif |
Type | Type complexe |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<Name> (obligatoire)<PropertySetRef> <Ref> <ResourceURL> <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. - Ensemble de propriétés : utilisez l'élément enfant
<PropertySetRef>
pour récupérer la valeur d'une paire nom/clé d'un ensemble de propriétés et les stocker dans une variable de flux. Vous permet d'accéder aux ensembles de propriétés de manière dynamique. - URL de ressource : utilisez l'élément enfant
<ResourceURL>
pour spécifier une URL pour une ressource textuelle, de type XSL, XSD, WSDL, JavaScript ou OpenAPI Spec. Cette action attribue le contenu de la ressource à la variable de flux nommée. - 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'ordre de priorité de ces éléments enfants est le suivant : ResourceURL, Template, Ref, Value, PropertySetRef.
L'élément <AssignVariable>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <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, Apigee utilise la valeur spécifiée par l'élément <Value>
. Si vous définissez <Template>
, il est prioritaire sur les éléments frères <Ref>
et <Value>
.
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, Apigee attribue 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='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Exemple 4
L'exemple suivant utilise <AssignVariable>
pour désactiver le comportement par défaut qui consiste à propager le suffixe de chemin d'accès de la requête de proxy à la requête cible :
<AssignMessage name='AM-PathSuffixFalse'> <AssignVariable> <Name>target.copy.pathsuffix</Name> <Value>false</Value> </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 <Name>
n'existe pas, la règle crée une variable portant ce nom.
Valeur par défaut | ND |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | Aucune |
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 en tant que 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.
<PropertySetRef>
(enfant de <AssignVariable>
)
Cet élément vous permet de récupérer la valeur d'une paire nom/clé d'un ensemble de propriétés de façon dynamique. Pour en savoir plus sur les ensembles de propriétés, consultez l'article Gérer les ensembles de propriétés.
Valeur par défaut | ND |
Requis ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | None |
Un ensemble de propriétés est constitué d'une paire nom/clé.
Exemple : propset1.id=12345
, où propset1
est le nom de l'ensemble de propriétés, id
une clé et 12345
la valeur de la clé.
L'élément enfant PropertySetRef
vous permet de sélectionner dynamiquement des noms et/ou des clés d'ensembles de propriétés. Supposons que vous ayez 200 règles de routage dans un fichier d'ensemble de propriétés. Vous pouvez accéder aux règles des ensembles de propriétés comme suit, où routingrules
est le nom de l'ensemble de propriétés et rule1
, rule2
et rulen
sont des clés :
propertyset.routingrules.rule1 propertyset.routingrules.rule2 propertyset.routingrules.rulen
Pour accéder à ces propriétés dans un flux de proxy d'API, vous devez savoir quelle règle vous souhaitez sélectionner au moment de la conception. Toutefois, supposons que le nom de la règle figure dans l'en-tête de la requête ou dans la charge utile. Pour sélectionner la règle, vous pouvez par exemple utiliser une règle JavaScript avec un code tel que celui-ci :
context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.
D'autre part, la fonctionnalité AssignMessage de PropertySetRef
vous permet de sélectionner une clé de propriété de manière dynamique sans recourir à JavaScript.
Vous pouvez utiliser une combinaison de variables de flux et de valeurs de chaîne littérales dans l'élément <PropertySetRef>
. Pour plus d'informations, consultez les exemples.
L'élément <PropertySetRef>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> </AssignVariable> </AssignMessage>
Exemple 1
Cet exemple attribue la valeur d'une clé d'un ensemble de propriétés à une variable de flux. Dans ce cas, le nom de l'ensemble de propriétés est obtenu à partir de l'en-tête propset_name
, la clé est fournie dans l'en-tête propset_key
et la valeur attribuée à la clé est stockée dans la variable flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef> </AssignVariable> </AssignMessage>
Vous pouvez utiliser n'importe quelle combinaison de variables de flux et de chaînes littérales dans l'élément <PropertySetRef>
.
Exemple 2
Cet exemple attribue la valeur d'une clé d'un ensemble de propriétés à une variable de flux à l'aide d'un nom de clé fixe (chaîne littérale). Dans ce cas, le nom de l'ensemble de propriétés est obtenu à partir de l'en-tête propset_name
, la clé est la chaîne littérale key1
et la valeur attribuée à la clé est stockée dans la variable flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef> </AssignVariable> </AssignMessage>
Vous pouvez utiliser n'importe quelle combinaison de variables de flux et de chaînes littérales dans l'élément <PropertySetRef>
.
<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 | ND |
Requis ? | 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 specify the variable name without brackets: <Ref>client.host</Ref> DO NOT use 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, Apigee 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, Apigee 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, Apigee 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 pour lequel la requête utilise un seul paramètre de requête 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 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.
La valeur de <Ref>
doit être une variable de flux, telle qu'une propriété de request
, response
ou target
ou le nom d'une variable de flux personnalisé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 false
, Apigee génère une erreur.
<ResourceURL>
(enfant de <AssignVariable>
)
Spécifie l'URL d'une ressource de texte comme source de l'attribution de variable. Apigee charge la variable de flux spécifiée dans <Name>
avec le contenu de la ressource référencée. La ressource peut être de type XSD, XSL, WSDL, JavaScript, Property Set ou Spécification OpenAPI.
Valeur par défaut | ND |
Requis ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | Aucun |
Si la ressource spécifiée par <ResourceURL>
n'existe pas, alors : si la valeur de <IgnoreUnresolvedVariables>
est true
, Apigee attribue la valeur null
à la variable de flux de destination, tandis que si la valeur de <IgnoreUnresolvedVariables>
est false
, Apigee génère une erreur.
L'élément <ResourceURL>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> </AssignVariable> </AssignMessage>
La valeur de texte utilise une valeur de chaîne et est interprétée comme un modèle de message. Les exemples suivants sont valides :
<ResourceURL>jsc://my-js-file.js</ResourceURL> <ResourceURL>wsdl://{variable-goes-here}</ResourceURL> <ResourceURL>{variable-goes-here}</ResourceURL>
Exemple 1
L'exemple suivant attribue la valeur d'une ressource JSON chargée dans le proxy du dossier jsc
dans la variable de flux assigned-variable
:
<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>jsc://settings.json</ResourceURL> </AssignVariable> </AssignMessage>
Exemple 2
L'exemple suivant attribue la valeur d'une ressource de spécification OpenAPI, chargée dans le dossier proxy dans le dossier oas
, dans la variable de flux assigned-variable
, puis définit cette valeur en tant que Payload
dans le corps de la réponse :
<AssignMessage name='AM-Response'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>oas://Fulfillment.yaml</ResourceURL> </AssignVariable> <Set> <Payload contentType='application/yaml'>{assigned-variable}</Payload> </Set> </AssignMessage>
<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é sur une application de développeur. Lorsque Apigee identifie l'application de développeur après avoir vérifié la clé API ou le jeton de sécurité (via une règle supplémentaire), l'élément <AssignVariable>
peut utiliser le modèle de message de l'attribut personnalisé de l'application, disponible en tant que variable de flux à partir de la règle de sécurité. L'exemple suivant suppose que le modèle de message est disponible dans un attribut personnalisé 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 :
<Template ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Valeur par défaut | ND |
Requis ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | Aucune |
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='AV-via-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='AV-via-template-indirectly'> <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
, où, dans certains cas, 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='AV-template-with-fallback'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <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 | ND |
Requis ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignVariable>
|
Éléments enfants | None |
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 plutôt 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 où cette règle s'exécute.
Valeur par défaut | ND |
Requis ? | Facultatif |
Type | Chaîne |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <StatusCode> <Verb> <Version> |
Si vous ne spécifiez aucun élément enfant sous l'élément <Copy>
, il copie toutes les parties du message source désigné.
L'élément <Copy>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="POLICY_NAME" >
<Copy source="VARIABLE_NAME">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
...
</FormParams>
<!-- Copy all headers -->
<Headers/>
<!-- or, copy specific headers by name -->
<Headers>
<Header name="HEADER_NAME"/>
<!-- or -->
<Header name="HEADER_NAME">[false|true]</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>
<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 le message request
à une nouvelle requête personnalisée nommée newRequest
:
<AssignMessage name="AM-copy-1"> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> <Copy source="request"> <Headers> <Header name="Header_Name_1"/> </Headers> <FormParams> <FormParam name="Form_Param_Name_1"/> <FormParam name="Form_Param_Name_2"/> <FormParam name="Form_Param_Name_3"/> </FormParams> <Path>true</Path> <QueryParams/> </Copy> </AssignMessage>
Comme les éléments tels que <Payload>
et <Verb>
ne sont pas présents, la règle ne copie pas ces parties du message.
Exemple 2
L'exemple suivant supprime d'abord tout le contenu du message response
existant, puis copie toutes les valeurs d'un message différent appelé secondResponse
dans le message response
:
<AssignMessage name='AM-Copy-Response'> <AssignTo createNew="false" transport="http" type="response">response</AssignTo> <!-- first remove any existing values --> <Remove/> <!-- then copy everything from the designated message --> <Copy source="secondResponse"/> </AssignMessage>
L'élément <Copy>
possède un seul attribut :
Attribut | Description | nécessaire | 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 | ND |
Requis ? | 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="VARIABLE_NAME"> <!-- 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
n'a qu'une seule valeur, le paramètre n'est pas copié.
Vous ne pouvez utiliser <FormParams>
que si 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 la valeur 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 | ND |
Requis ? | 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="VARIABLE_NAME"> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</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="AM-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
Si plusieurs en-têtes portent 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, il 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>
dans 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 | Aucune |
L'élément <Path>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <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 si 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 à partir du message spécifié par l'attribut source
de l'élément <Copy>
dans 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 | Aucune |
L'élément <Payload>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <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 de la requête dans la réponse :
<AssignMessage name="AM-copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo>response</AssignTo> </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 | ND |
Requis ? | Facultatif |
Type | Tableau d'éléments <QueryParam> ou tableau vide |
Élément parent |
<QueryParam>
|
Éléments enfants | Aucune |
L'élément <QueryParams>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <!-- 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 dans 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
ne comporte qu'une seule valeur, le paramètre n'est pas copié.
Vous ne pouvez utiliser <QueryParams>
que lorsque les critères suivants sont remplis :
- Verbes HTTP :
GET
,POST
,PATCH
,DELETE
- Type de message : Requête
<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 à partir du message de réponse spécifié par l'attribut source
de l'élément <Copy>
dans 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 | Aucune |
L'élément <StatusCode>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <StatusCode>
sur true
, qui copie le code d'état de l'objet de réponse par défaut dans 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 messages source et de destination sont de type Response.
Une utilisation courante de <StatusCode>
consiste à définir une valeur de code d'état de la réponse du proxy différente de celle reçue de la cible.
<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>
dans 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 | Aucune |
L'élément <Verb>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <Verb>
sur true
, qui copie le verbe de la requête par défaut dans 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 si 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 | Aucune |
L'élément <Version>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Exemple 1
L'exemple suivant définit <Version>
sur true
sur la requête, qui copie la version de l'objet de requête par défaut dans 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 si les critères suivants sont remplis :
- Type de message : Requête
<DisplayName>
Utilisez-le, en plus de l'attribut name
, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent et plus naturel.
L'élément <DisplayName>
est commun à toutes les règles.
Valeur par défaut | ND |
Obligatoire ? | Facultatif. Si vous omettez <DisplayName> , la valeur de l'attribut name de la règle est utilisée. |
Type | Chaîne |
Élément parent | <PolicyElement> |
Éléments enfants | Aucune |
L'élément <DisplayName>
utilise la syntaxe suivante :
Syntaxe
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
Exemple
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
L'élément <DisplayName>
ne comporte aucun attribut ni élément enfant.
<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 l'élément <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
, Apigee 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="AM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Comme <IgnoreUnresolvedVariables>
est défini sur true
, si la variable possibly-defined-variable
n'est pas définie, cette règle ne génère pas d'erreur.
<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. Une balise <Remove>
vide supprime tout le contenu du message.
Le message affecté 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 | ND |
Requis ? | 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 ou un en-tê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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant supprime le corps du message de la réponse :
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </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 l'objet request
:
<AssignMessage name="AM-remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 3
L'exemple suivant supprime tout d'un objet de message :
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
En règle générale, vous ne devez effectuer cette opération que si vous utilisez les éléments <Set>
ou <Copy>
pour définir des valeurs de remplacement dans le message.
<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 | ND |
Requis ? | 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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant supprime trois paramètres de formulaire de la requête :
<AssignMessage name="AM-remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant supprime tous les paramètres de formulaire de la requête :
<AssignMessage name="AM-remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 3
S'il existe plusieurs paramètres de formulaire du même nom, utilisez la syntaxe suivante :
<AssignMessage name="AM-remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </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 si 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 | ND |
Requis ? | 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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant supprime l'en-tête user-agent
de la requête :
<AssignMessage name="AM-remove-one-header"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant supprime tous les en-têtes de la requête :
<AssignMessage name="AM-remove-all-headers"> <Remove> <Headers/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 3
Si plusieurs en-têtes portent le même nom, utilisez la syntaxe suivante :
<AssignMessage name="AM-remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo>request</AssignTo> </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éfinissez la valeur 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 | Aucune |
L'élément <Payload>
utilise la syntaxe suivante :
Syntaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Exemple 1
L'exemple suivant définit <Payload>
sur true
afin que la charge utile de la requête soit effacée :
<AssignMessage name="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </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 | ND |
Requis ? | 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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</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="AM-remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant supprime tous les paramètres de la requête :
<AssignMessage name="AM-remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 3
S'il existe plusieurs paramètres de requête portant le même nom, utilisez la syntaxe suivante
<AssignMessage name="AM-remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </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="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Vous ne pouvez utiliser <QueryParams>
que lorsque les critères suivants sont remplis :
- Verbes HTTP :
GET
,POST
,PATCH
,DELETE
- 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 de requête ou de formulaire qui existent déjà dans le message d'origine, ou en ajoute de nouveaux.
Les en-têtes et les paramètres de requête et de formulaire dans un message HTTP peuvent contenir plusieurs valeurs. Pour ajouter des valeurs supplémentaires à un en-tête ou à un paramètre, utilisez plutôt l'élément <Add>
.
Valeur par défaut | ND |
Requis ? | Facultatif |
Type | Type complexe |
Élément parent |
<AssignMessage>
|
Éléments enfants |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <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> <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 définit un en-tête spécifique. Lorsque cette règle est associée dans le flux de requête, elle permet au système en amont de recevoir un en-tête supplémentaire qui n'a pas été inclus dans la requête entrante d'origine.
<AssignMessage name="AM-Set-Header"> <Set> <Headers> <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header> </Headers> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Exemple 2
L'exemple suivant écrase la charge utile d'une réponse, ainsi que l'en-tête Content-Type
.
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </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 | ND |
Requis ? | 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="AM-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 si 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 la variable Content-Type
du message 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 | ND |
Requis ? | 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 x-ratelimit-remaining
sur la valeur de la variable ratelimit.Quota-1.available.count
:
<AssignMessage name="AM-Set-RateLimit-Header"> <Set> <Headers> <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header> </Headers> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Si vous définissez des en-têtes vides dans votre stratégie (<Set><Headers/></Set>
), la règle ne définit aucun en-tête. Cela aura le même effet que d'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 | Aucune |
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, 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 | ND |
Requis ? | 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 name="AM-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 :
- Verbes HTTP :
GET
,POST
,PATCH
,DELETE
- 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>
.
<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 | Aucune |
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="AM-set-statuscode-404"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo>response</AssignTo> </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>response</AssignTo> </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 | ND |
Requis ? | Facultatif |
Type | Chaîne ou VARIABLE |
Élément parent |
<Set>
|
Éléments enfants | Aucune |
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="AM-set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo>request</AssignTo> </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="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </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 | ND |
Requis ? | Facultatif |
Type | Chaîne ou VARIABLE |
Élément parent |
<Set>
|
Éléments enfants | Aucune |
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="AM-set-version-1"> <Set> <Version>1.1</Version> </Set> </AssignMessage>
Exemple 2
La variable suivante utilise une variable entre accolades pour définir le numéro de version :
<AssignMessage name="AM-set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo>request</AssignTo> </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">MyRequestObject</AssignTo> ... </AssignMessage>
Par défaut, Apigee n'effectue aucune action par rapport au message de requête personnalisé. Une fois créé, Apigee 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, puis référencez explicitement le message de requête nouvellement créé dans la configuration de cette règle. Cela vous permet de transmettre la requête personnalisée à un point de terminaison de 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 AssignMessage :
<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>
ne spécifie pas l'attributsource
, Apigee utilise le messagerequest
comme source à partir de laquelle copier. - 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>
surfalse
. Lorsque la valeur de<IgnoreUnresolvedVariables>
estfalse
, si l'une des variables référencées dans la configuration de la règle n'existe pas, Apigee entre dans l'état d'erreur 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 AssignMessage :
<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 aux différentes propriétés d'un message personnalisé dans une autre règle AssignMessage qui se produit ultérieurement dans le flux. L'exemple suivant récupère la valeur d'un en-tête à partir d'une réponse personnalisée nommée et la place dans un nouvel en-tête du message de requête :
<AssignMessage name="AM-Copy-Custom-Header"> <AssignTo>request</AssignTo> <Set> <Headers> <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header> </Headers> </Set> </AssignMessage>
Codes d'erreur
Cette section décrit les codes d'erreur et les messages d'erreur renvoyés et les variables d'erreur définies par Apigee lorsque cette règle déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.
Erreurs d'exécution
Ces erreurs peuvent se produire lors de l'exécution de la règle.
Code d'erreur | État HTTP | Cause | Corriger |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 |
La règle n'a pas pu définir de variable. Consultez la chaîne d'erreur pour le nom de la variable non résolue. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Cette erreur se produit si l'attribut Les variables de type Message représentent des requêtes et des réponses HTTP entières. Les variables de flux Apigee intégrées |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Cette erreur se produit si une variable spécifiée dans la règle AssignMessage est :
|
build |
Erreurs de déploiement
Ces erreurs peuvent se produire lorsque vous déployez un proxy contenant cette règle.
Nom de l'erreur | Cause | Corriger |
---|---|---|
InvalidIndex |
Si l'index spécifié dans les éléments <Copy> et/ou <Remove> de la règle AssignMessage est 0 ou un nombre négatif, le déploiement du proxy d'API échoue.
|
build |
InvalidVariableName |
Si l'élément enfant <Name> est vide ou non spécifié dans l'élément <AssignVariable> , le déploiement du proxy d'API échoue, car il n'existe pas de nom de variable valide auquel attribuer une valeur. Vous devez indiquer un nom de variable valide.
|
build |
InvalidPayload |
Une charge utile spécifiée dans la règle n'est pas valide. |
Variables de panne
Ces variables sont définies lorsque cette règle déclenche une erreur au moment de l'exécution. Pour en savoir plus, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.
Variables | Lieu | Exemple |
---|---|---|
fault.name="FAULT_NAME" |
FAULT_NAME est le nom de l'erreur, tel qu'indiqué dans le tableau Erreurs d'exécution ci-dessus. Le nom d'erreur est la dernière partie du code d'erreur. | fault.name Matches "UnresolvedVariable" |
assignmessage.POLICY_NAME.failed |
POLICY_NAME est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. | assignmessage.AM-SetResponse.failed = true |
Exemple de réponse d'erreur
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Exemple de règle de défaillance
<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 ServiceCallout
pour envoyer la requête à un service externe.