Règle AssignMessage

Vous consultez la documentation d'Apigee Edge.
Accédez à la documentation sur Apigee X.
info

Quoi

La règle AssignMessage modifie ou crée des messages de requête et de réponse pendant le flux du proxy d'API. La règle vous permet d'effectuer les actions suivantes sur ces messages :

  • Ajouter de nouveaux paramètres de formulaire, d'en-têtes ou de requête à un message.
  • Copier des propriétés existantes d'un message à un autre
  • Supprimer des en-têtes, des paramètres de requête, des paramètres de formulaire et/ou des charges utiles de message d'un message
  • Définir la valeur des propriétés existantes dans un message.

Avec la règle AssignMessage, vous ajoutez, modifiez ou supprimez généralement des propriétés de la requête ou de la réponse. Toutefois, vous pouvez également utiliser la règle AssignMessage pour créer un message de requête ou de réponse personnalisé et le transmettre à une autre cible, comme décrit dans la section Créer des messages de requête personnalisés.

La règle AssignMessage peut créer ou modifier des variables de flux avec les éléments enfants suivants :

Élément <AssignMessage>

Définit une stratégie AssignMessage.

Valeur par défaut Consultez l'onglet Règles par défaut ci-dessous.
Obligatoire ? Obligatoire
Type Objet complexe
Élément parent Non disponible
Éléments enfants <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

L'élément <AssignMessage> utilise la syntaxe suivante :

Syntaxe

L'élément <AssignMessage> utilise la syntaxe suivante :

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

Règle par défaut

L'exemple suivant montre les paramètres par défaut lorsque vous ajoutez une règle AssignMessage à votre flux dans l'interface utilisateur Edge:

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Lorsque vous insérez une nouvelle stratégie AssignMessage dans l'interface utilisateur d'Edge, le modèle contient des bouchons pour toutes les opérations possibles. En règle générale, vous devez sélectionner les opérations que vous souhaitez effectuer avec cette règle et supprimer le reste des éléments enfants. Par exemple, si vous souhaitez effectuer une opération de copie, utilisez l'élément <Copy> et supprimez <Add>, <Remove> et d'autres éléments enfants de la règle pour la rendre plus lisible.

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails.
enabled true Optional Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

Le tableau suivant fournit une description détaillée des éléments enfants de <AssignMessage> :

Élément enfant Obligatoire ? Description
Opérations courantes
<Add> Facultatif Ajoute des informations à l'objet message spécifié par l'élément <AssignTo>.

<Add> ajoute au message les en-têtes ou les paramètres qui n'existent pas dans le message d'origine. Pour écraser des en-têtes ou des paramètres existants, utilisez l'élément <Set>.

<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>.

<Set> écrase les en-têtes ou les paramètres déjà présents dans le message d'origine. Pour ajouter des en-têtes ou des paramètres, utilisez l'élément <Add>.

Autres éléments enfants
<AssignTo> Facultatif Indique le message sur lequel la stratégie AssignMessage fonctionne. Il peut s'agir de la requête ou de la réponse standard, ou d'un nouveau message personnalisé.
<AssignVariable> Facultatif Attribue une valeur à une variable de flux. Si la variable n'existe pas, <AssignVariable> la crée.
<IgnoreUnresolvedVariables> Facultatif Détermine si le traitement s'arrête lorsqu'une variable non résolue est rencontrée.

Chacun des éléments enfants est décrit dans les sections ci-après.

Exemples

Les exemples suivants illustrent certaines des manières dont vous pouvez utiliser la règle AssignMessage:

1 : Ajouter un en-tête

L'exemple suivant ajoute un en-tête à la requête avec l'élément <Add> :

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2 : Supprimer la charge utile

L'exemple suivant supprime la charge utile de la réponse avec l'élément <Remove> :

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3 : Modifier la réponse

L'exemple suivant modifie un objet de réponse existant en lui ajoutant un en-tête :

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

Cet exemple ne crée pas de message. À la place, il modifie un message de réponse existant en ajoutant un en-tête HTTP.

Comme cet exemple omet un nom de variable dans l'élément <AssignTo> et spécifie type comme "réponse", cette règle modifie l'objet de réponse renvoyé par le serveur cible.

L'en-tête HTTP ajouté au message de réponse par cette règle est dérivé d'une variable renseignée par la règle LookupCache. Par conséquent, le message de réponse modifié par cette règle d'attribution de messages contient un en-tête HTTP qui indique si les résultats ont été extraits du cache ou non. La définition d'en-têtes dans la réponse peut être utile pour le débogage et le dépannage.

4 : Définir un contenu dynamique

Vous pouvez utiliser la règle d'attribution de messages pour intégrer le contenu dynamique dans la charge utile des messages de réponse et de requête.

Pour intégrer des variables de flux Edge dans une charge utile XML, placez la variable désignée entre accolades, comme ceci : {prefix.name}.

L'exemple suivant intègre la valeur de la variable de flux d'en-tête HTTP user-agent dans un élément XML appelé User-agent :

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Pour les charges utiles JSON, vous pouvez insérer des variables à l'aide des attributs variablePrefix et variableSuffix avec des caractères de délimitation, comme illustré dans l'exemple suivant :

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

Pour obtenir une liste complète des variables de flux, reportez-vous à la documentation de référence des variables de flux groupée).

Depuis la version 16.08.17 du cloud, vous pouvez également utiliser des accolades pour insérer des variables.

5 : Supprimer le paramètre de requête

L'exemple suivant supprime le paramètre de requête apikey de la requête :

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Il est recommandé de supprimer le paramètre de requête apikey du message de requête lorsque vous utilisez la règle VerifyAPIKey pour l'authentification de l'utilisateur. Cette démarche permet d'empêcher la transmission des informations de clé sensibles à la cible principale.

6 : Définir/obtenir des variables

L'exemple suivant utilise trois règles d'attribution de messages :

  1. Crée trois variables de flux dans la requête, avec des valeurs statiques.
  2. Récupère les variables de flux de façon dynamique dans une deuxième règle du flux de requête.
  3. Les définit dans la charge utile de la réponse.
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Dans la première règle, l'élément <AssignVariable> crée et définit trois variables dans la requête. Chaque élément <Name> spécifie un nom de variable et <Value> spécifie la valeur.

La deuxième règle utilise l'élément <AssignVariable> pour lire les valeurs et créer trois variables :

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

Dans la seconde règle, l'élément <Ref> fait référence à la variable source, et les éléments <Name> spécifient le nom des nouvelles variables. Si la variable référencée par l'élément <Ref> n'est pas accessible, vous pouvez utiliser la valeur spécifiée par l'élément <Value>.

Pour essayer ces règles, procédez comme suit :

  1. 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.
  2. Ajoutez la troisième règle dans le flux response.
  3. La troisième règle utilise l'élément <Set> pour ajouter les variables à la réponse. L'exemple suivant construit une charge utile XML dans la réponse renvoyée par Edge au client :
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    Notez que la syntaxe permettant d'accéder aux variables de flux dans <Set> consiste à les placer entre accolades.

    Veillez à définir l'attribut contentType de l'élément <Payload> sur "application/xml".

  4. Envoyez une requête à votre proxy d'API. Exemple :
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Vous pouvez également lier les résultats via un utilitaire tel que xmllint pour que le code XML s'affiche dans une structure correctement formatée :

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    Le corps de la réponse doit se présenter comme suit :

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7 : Obtenir les en-têtes de réponse d'appel de service

Dans l'exemple suivant, supposons qu'une règle ServiceCallout figure dans la requête de proxy d'API et que la réponse à l'appel contienne plusieurs en-têtes portant le même nom (Set-Cookie). En supposant que la variable de réponse de l'appel de service est la valeur par défaut calloutResponse, la règle suivante récupère la deuxième valeur d'en-tête Set-Cookie.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Pour répertorier toutes les valeurs d'en-tête, utilisez plutôt la variable suivante :

{calloutResponse.header.Set-Cookie.values}

Chaque élément enfant de cette référence comporte des exemples supplémentaires. Pour obtenir d'autres exemples, consultez la section Exemple AssignMessage sur GitHub.

Référence d'élément enfant

Cette section décrit les éléments enfants de <AssignMessage>.

<Add>

Ajoute des informations à la requête ou à la réponse, spécifiée par l'élément <AssignTo>.

L'élément <Add> ajoute les propriétés au message qui n'existent pas dans le message d'origine. Pour modifier les valeurs des propriétés existantes, utilisez l'élément <Set>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <AssignMessage>
Éléments enfants <FormParams>
<Headers>
<QueryParams>

L'élément <Add> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Exemple 1

L'exemple suivant utilise l'élément <FormParams> pour obtenir les valeurs de trois paramètres de chaîne de requête de la requête initiale et les définir en tant que paramètres de formulaire sur la requête de point de terminaison cible :

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Exemple 2

L'exemple suivant utilise l'élément <Headers> pour ajouter l'en-tête User-Agent à la requête de point de terminaison cible :

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Exemple 3

L'exemple suivant utilise l'élément <QueryParams> pour ajouter à la requête un seul paramètre de requête doté d'une valeur statique :

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Cet exemple utilise <Add> dans le flux de requêtes. Si vous consultez les résultats dans un outil tel que l'outil de suivi, la requête envoyée à "http://httpbin.org/get" devient "http://httpbin.org/get?myParam=42".

Les éléments enfants de <Add> acceptent la substitution de chaîne dynamique, appelée modélisation de message.

<FormParams> (enfant de <Add>)

Ajoute des paramètres de formulaire au message de requête. Cet élément n'a aucun effet sur le message de réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <FormParam>
Élément parent <Add>
Éléments enfants <FormParam>

L'élément <FormParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

Exemple 1

L'exemple suivant ajoute un seul paramètre de formulaire ("answer") et une valeur statique ("42") à la requête :

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

Exemple 2

L'exemple suivant récupère la valeur du paramètre de chaîne de requête name et l'ajoute à la requête en tant que paramètre de formulaire :

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

Notez que cet exemple ne spécifie pas de cible avec <AssignTo>. Cette règle ajoute le paramètre à la requête uniquement.

Exemple 3

L'exemple suivant ajoute plusieurs paramètres de formulaire à la requête :

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Cet exemple récupère les paramètres de chaîne de requête de la requête d'origine et les ajoute en tant que paramètres de formulaire à la requête envoyée au point de terminaison cible.

Vous pouvez utiliser l'outil Trace pour consulter le flux. Le corps de la requête contient les données de formulaire encodées en URL qui ont été initialement transmises en tant que paramètres de chaîne de requête :

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

Vous ne pouvez utiliser <FormParams> que lorsque les critères suivants sont remplis :

  • Verbe HTTP : POST
  • Type de message : Requête
  • Un des éléments suivants (ou les deux) :
    • Données de formulaire : défini sur une valeur ou sur "" (la chaîne vide). Par exemple, avec curl, ajoutez -d "" à votre requête.
    • En-tête Content-Length : défini sur 0 (si aucune donnée ne figure dans la requête d'origine, sinon, la longueur actuelle, en octets). Par exemple, avec curl, ajoutez -H "Content-Length: 0" à votre requête.

Exemple :

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

Lorsque vous ajoutez <FormParams>, Edge définit l'en-tête Content-Type de la requête sur "application/x-www-form-urlencoded" avant d'envoyer le message au service cible.

<Headers> (enfant de <Add>)

Ajoute des en-têtes à la requête ou à la réponse spécifiée, indiquée par l'élément <AssignTo>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <Header>
Élément parent <Add>
Éléments enfants <Header>

L'élément <Headers> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

Exemple 1

L'exemple suivant ajoute l'en-tête user-agent au message de requête et attribue la valeur de la variable de flux request.user.agent à cet en-tête.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (enfant de <Add>)

Ajoute des paramètres de requête à la requête. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <QueryParam>
Élément parent <Add>
Éléments enfants <QueryParam>

L'élément <QueryParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Exemple 1

L'exemple suivant ajoute le paramètre de requête "myParam" à la requête et lui attribue la valeur "42" :

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Vous ne pouvez utiliser <QueryParams> que lorsque les critères suivants sont remplis :

  • Verbe HTTP : GET
  • Type de message : Requête

De plus, vous ne pouvez définir des paramètres de requête que lorsque l'attribut type de l'élément <AssignTo> est un message de requête. Les paramètres définis dans la réponse n'ont aucun effet.

Si vous définissez un tableau de paramètres de requête vide dans votre règle (<Add><QueryParams/></Add>), celle-ci n'ajoute aucun paramètre de requête. Cela revient à omettre <QueryParams>.

<AssignTo>

Détermine l'objet sur lequel agit la stratégie AssignMessage. Vous disposez des options suivantes :

  • Message de requête : le request reçu par le proxy d'API
  • Message de réponse : le message response renvoyé par le serveur cible
  • Message personnalisé : requête ou objet de réponse personnalisé

Notez que dans certains cas, vous ne pouvez pas modifier l'objet sur lequel agit la règle AssignMessage. Par exemple, vous ne pouvez pas utiliser <Add> ou <Set> pour ajouter ou modifier des paramètres de requête (<QueryParams>) ou des paramètres de formulaire (<FormParams>) sur la réponse. Vous ne pouvez manipuler que les paramètres de requête et les paramètres de formulaire sur la requête.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <AssignMessage>
Éléments enfants Aucun

Si vous ne spécifiez pas <AssignTo>, la règle agit sur la requête ou la réponse par défaut, qui dépend de l'emplacement d'exécution de la stratégie. Si la règle s'exécute dans le flux de requête, elle a une incidence sur le message de la requête. Si elle s'exécute dans le flux de réponse, la règle affecte par défaut la réponse.

L'élément <AssignTo> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

Exemple 1

L'exemple suivant spécifie que la cible est la requête d'origine qui sera envoyée au point de terminaison cible :

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Si vous définissez createNew sur "false" (valeur par défaut), cet exemple ne crée pas de requête. Toutes les opérations de cette règle affectent la requête d'origine.

Exemple 2

L'exemple suivant crée un objet de requête :

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Lorsque vous créez un objet de requête ou de réponse, les autres éléments de la règle AssignMessage (tels que <Add>, <Set> et <Set>) agissent sur ce nouvel objet de requête.

Vous pourrez accéder ultérieurement au nouvel objet de requête dans d'autres règles du flux ou envoyer le nouvel objet de requête à un service externe avec une règle ServiceCallout.

Exemple 3

L'exemple suivant crée un objet de requête nommé "MyRequestObject" :

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

Lorsque vous créez un objet de requête ou de réponse, les autres éléments de la règle AssignMessage (tels que <Add>, <Set> et <Set>) agissent sur ce nouvel objet de requête.

Vous pourrez accéder ultérieurement au nouvel objet de requête dans d'autres règles du flux ou envoyer le nouvel objet de requête à un service externe avec une règle ServiceCallout.

Le tableau suivant décrit les attributs de <AssignTo> :

Attribut Description Obligatoire ? Type
createNew

Détermine si cette règle crée un message lors de l'attribution de valeurs.

Si la valeur est "true", la règle crée une variable du type spécifié par type (par exemple, "request" ou "response"). Si vous ne spécifiez pas le nom de la nouvelle variable, la règle crée un objet de requête ou de réponse basé sur la valeur type.

Si la valeur est "false", la règle répond de l'une des deux manières suivantes :

  • Si <AssignTo> peut résoudre le nom de la variable dans une requête ou une réponse, le traitement se poursuit. Par exemple, si la règle se trouve dans un flux de requête, la variable est l'objet de requête. Si la règle est dans une réponse, la variable est l'objet de réponse.
  • Si <AssignTo> ne peut être résolu ou est associé à un type qui n'est pas un message, la règle génère une erreur.

Si createNew n'est pas spécifié, la règle répond de l'une des deux manières suivantes :

  • Si <AssignTo> renvoie un message, le traitement passe à l'étape suivante.
  • Si <AssignTo> ne peut être résolu ou est associé à un type qui n'est pas un message, une variable de type spécifiée dans type est créée.
Facultatif Booléen
transport

Spécifie le type de transport pour le type de message de requête ou de réponse.

La valeur par défaut est "http" (seule valeur acceptée).

Facultatif Chaîne
type Spécifie le type du nouveau message, lorsque createNew est défini sur "true". Les valeurs valides sont "request" ou "response".

La valeur par défaut est "request". Si vous omettez cet attribut, Edge crée une requête ou une réponse, selon l'emplacement du flux exécuté par cette règle.

Facultatif Chaîne

<AssignVariable>

Attribue une valeur à une variable de flux de destination (par exemple, une variable dont la valeur est définie par la règle AssignMessage). Si la variable de flux n'existe pas, <AssignVariable> la crée.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <AssignMessage>
Éléments enfants <Name> (obligatoire)
<Ref>
<Template>
<Value>

La valeur que vous attribuez à la variable de flux de destination peut être l'une des suivantes :

  • Chaîne littérale : utilisez l'élément enfant <Value> pour spécifier une valeur de chaîne littérale pour la variable de flux de destination.
  • Variable de flux : utilisez l'élément enfant <Ref> pour spécifier la valeur d'une variable de flux existante pour la variable de flux de destination. Pour obtenir la liste complète des variables de flux pouvant être utilisées comme source, consultez la documentation de référence sur les variables de flux.
  • Modèle de message : utilisez l'élément enfant <Template> pour spécifier un modèle de message pour la variable de flux de destination.

L'élément <AssignVariable> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Utilisez l'élément <Ref> pour spécifier la variable source. Si la variable référencée par <Ref> n'est pas accessible, Edge utilise la valeur spécifiée par l'élément <Value>. Si vous définissez <Template>, il est prioritaire sur les autres éléments enfants.

Exemple 1

L'exemple suivant définit la valeur d'une nouvelle variable, myvar, sur la valeur littérale "42" :

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Exemple 2

L'exemple suivant attribue la valeur de la variable de flux. request.header.user-agent à la variable de flux de destination myvar et la valeur du paramètre de requête country à la variable de flux de destination Country :

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Si l'une des attributions échoue, Edge attribue à la place la valeur "ErrorOnCopy" à la variable de flux de destination.

Si les variables de flux myvar ou Country n'existent pas, <AssignVariable> les crée.

Exemple 3

L'exemple suivant utilise l'élément enfant <Template> pour concaténer deux variables de contexte avec une chaîne littérale (un trait d'union) entre elles :

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Une utilisation courante de <AssignVariable> consiste à définir une valeur par défaut pour un paramètre de requête, un en-tête ou une autre valeur pouvant être transmise avec la requête. Pour ce faire, vous pouvez combiner les éléments enfants <Ref> et <Value>. Pour en savoir plus, consultez les exemples sur <Ref>.

<Name> (enfant de <AssignVariable>)

Spécifie le nom de la variable de flux de destination (par exemple, la variable dont la valeur est définie par la règle AssignMessage). Si la variable nommée <AssignVariable> n'existe pas, la règle crée une variable portant ce nom.

Valeur par défaut N/A
Obligatoire ? Obligatoire
Type Chaîne
Élément parent <AssignVariable>
Éléments enfants Aucun

L'élément <Name> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

Exemple 1

L'exemple suivant spécifie la variable de destination comme myvar et la définit sur la valeur littérale "42" :

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Si le fichier myvar n'existe pas, <AssignVariable> le crée.

<Ref> (enfant de <AssignVariable>)

Spécifie la source de l'attribution en tant que variable de flux. La variable de flux peut être l'une des variables de flux prédéfinies (répertoriées dans la documentation de référence sur les variables de flux) ou une variable de flux personnalisée que vous avez créée.

La valeur de <Ref> est toujours interprétée comme une variable de flux. Vous ne pouvez pas spécifier de chaîne littérale comme valeur. Pour attribuer une valeur de chaîne littérale, utilisez plutôt l'élément <Value>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <AssignVariable>
Éléments enfants Aucun

Lorsque vous spécifiez une variable de flux avec <Ref>, omettez les accolades "{}" que vous utilisez généralement pour référencer une variable de flux. Par exemple, pour définir la valeur de votre nouvelle variable sur la valeur de la variable de flux client.host, procédez comme suit :

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

Pour définir une valeur par défaut pour la variable de flux de destination, utilisez <Value> conjointement avec <Ref>. Si la variable de flux spécifiée par <Ref> n'existe pas, ne peut pas être lue ou si sa valeur est nulle, Edge attribue la valeur de <Value> à la variable de flux de destination.

L'élément <Ref> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

Exemple 1

L'exemple suivant attribue la valeur de la variable de flux request.header.user-agent à la variable de flux de destination myvar et la valeur du paramètre de requête country à la variable Country :

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

Dans cet exemple, Edge n'a pas de valeur par défaut (ou valeur de remplacement) spécifiée pour l'une ou l'autre des attributions.

Exemple 2

L'exemple suivant attribue la valeur de la variable de flux request.header.user-agent à la variable de flux de destination myvar et la valeur du paramètre de requête country à la variable Country :

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Dans cet exemple, si les valeurs de la variable de flux request.header.user-agent ou du paramètre de requête Country sont NULL, illisibles ou incorrectes, Edge attribue la valeur "ErrorOnCopy" aux nouvelles variables.

Exemple 3

Un cas d'utilisation courant de <AssignVariable> consiste à définir la valeur par défaut d'un paramètre de requête, d'un en-tête ou d'une autre valeur pouvant être transmise avec la requête. Par exemple, vous créez un proxy d'API météo dans lequel la requête utilise un seul paramètre nommé "w". Ce paramètre contient l'ID de la ville pour laquelle vous souhaitez obtenir la météo. L'URL de la requête prend la forme suivante :

http://myCO.com/v1/weather/forecastrss?w=city_ID

Pour définir une valeur par défaut pour "w", créez une règle AssignMessage comme suit:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

Dans cet exemple, <AssignVariable> récupère la valeur de request.queryparam.w et l'attribue à lui-même. Si la valeur de la variable de flux est nulle, ce qui signifie que le paramètre de requête "w" a été omis de la requête, cet exemple utilise la valeur par défaut de l'élément <Value>. Par conséquent, vous pouvez envoyer une requête à ce proxy d'API qui omet le paramètre de requête "w" :

http://myCO.com/v1/weather/forecastrss

mais renvoie toujours un résultat valide.

Contrairement à <Value>, la valeur de <Ref> doit être une variable de flux, telle qu'une propriété d'une request, response, ou target. La valeur peut également être une variable de flux personnalisée que vous avez créée.

Si vous spécifiez une variable de flux qui n'existe pas pour la valeur de <Ref> et que la valeur de <IgnoreUnresolvedVariables> est "true", Edge génère une erreur.

<Template> (enfant de <AssignVariable>)

Spécifie un modèle de message. Un modèle de message vous permet d'effectuer une substitution de chaîne de variables lors de l'exécution de la règle, et de combiner des chaînes littérales avec des noms de variables placés entre accolades. De plus, les modèles de message sont compatibles avec les fonctions, telles que l'échappement et la conversion de casse.

Utilisez l'attribut ref pour spécifier une variable de flux dont la valeur est un modèle de message. Par exemple, vous pouvez stocker un modèle de message en tant qu'attribut personnalisé dans une application de développement. Lorsque Edge identifie l'application de développement après avoir validé la clé API ou le jeton de sécurité (via une stratégie supplémentaire), l'élément <AssignVariable> peut utiliser le modèle de message de l'attribut personnalisé de l'application, qui est disponible en tant que variable de flux à partir de la stratégie de sécurité. L'exemple suivant suppose que le modèle de message est disponible dans un attribut client appelé message_template sur l'application de développement qui effectue l'appel d'API, où la règle VerifyAPIKey a été utilisée pour valider la clé API de l'application :

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <AssignVariable>
Éléments enfants Aucun

L'élément <Template> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

Exemple 1

L'exemple suivant utilise la syntaxe de modélisation de messages pour concaténer deux variables de contexte avec une chaîne littérale (un trait d'union) entre elles :

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Exemple 2

L'exemple suivant spécifie une variable de flux, où la valeur de la variable est un modèle de message prédéfini. Utilisez cette option si vous souhaitez injecter un modèle prédéfini au moment de l'exécution sans avoir à modifier la stratégie :

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

Exemple 3

L'exemple suivant spécifie une variable de flux et une valeur textuelle. Dans ce cas, si la variable référencée n'est pas nulle, cette valeur est utilisée comme modèle. Si la valeur référencée est nulle, la valeur de texte (dans ce cas, {system.uuid}-{messageid}) est utilisée comme modèle. Ce modèle est utile pour fournir une valeur "override", dans les cas où vous souhaitez remplacer le modèle par défaut (la partie texte) par des valeurs définies de manière dynamique. Par exemple, une instruction conditionnelle peut extraire une valeur d'un mappage clé-valeur et définir la variable référencée sur cette valeur :

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (enfant de <AssignVariable>)

Définit la valeur de la variable de flux de destination définie avec <AssignVariable>. La valeur est toujours interprétée comme une chaîne littérale. Vous ne pouvez pas utiliser une variable de flux comme valeur, même si vous la placez entre accolades ("{}"). Pour utiliser une variable de flux, utilisez plutôt <Ref>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <AssignVariable>
Éléments enfants Aucun

Utilisé conjointement avec l'élément <Ref>, <Value> sert de valeur par défaut (ou de remplacement). Si <Ref> n'est pas spécifié, ne peut pas être résolu ou si sa valeur est nulle, la valeur de <Value> est utilisée.

L'élément <Value> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Exemple 1

L'exemple suivant définit la valeur de la variable de flux de destination, myvar, sur la valeur littérale "42" :

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Exemple 2

L'exemple suivant attribue la valeur de la variable de flux request.header.user-agent à la variable de flux myvar et la valeur du paramètre de requête country à la variable Country :

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Si l'une des attributions échoue, <AssignVariable> attribue à la place la valeur "ErrorOnCopy" à la variable de flux de destination.

<Copy>

Copie les valeurs à partir du message spécifié par l'attribut source vers le message spécifié par l'élément <AssignTo>. Si vous ne spécifiez pas de cible avec <AssignTo>, cette règle copie les valeurs dans la requête ou la réponse, selon l'emplacement du flux qu'elle exécute.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <AssignMessage>
Éléments enfants <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

L'élément <Copy> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

Exemple 1

L'exemple suivant copie un en-tête, trois paramètres de formulaire, le chemin d'accès et tous les paramètres de requête depuis la requête vers une nouvelle requête personnalisée :

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

L'élément <Copy> possède les attributs suivants :

Attribut Description Obligatoire ? Type
source

Spécifie l'objet source de la copie.

  • Si source n'est pas spécifié, il est traité comme un simple message. Par exemple, si la règle se trouve dans le flux de requête, la source est définie par défaut sur l'objet request. Si la règle se trouve dans le flux de réponse, elle utilise par défaut l'objet response. Si vous omettez source, vous pouvez utiliser une référence absolue à une variable de flux comme source de la copie. Par exemple, spécifiez la valeur {request.header.user-agent}.
  • Si la variable source ne peut résolue ou est associée à un type qui n'est pas un message, <Copy> ne répond pas.
Facultatif Chaîne

<FormParams> (enfant de <Copy>)

Copie les paramètres de formulaire de la requête spécifiée par l'attribut source de l'élément <Copy> vers la requête spécifiée par <AssignTo>. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <FormParam> ou tableau vide
Élément parent <Copy>
Éléments enfants <FormParam>

L'élément <FormParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant copie un seul paramètre de formulaire de la requête vers la requête personnalisée "MyCustomRequest" :

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Exemple 2

L'exemple suivant copie tous les paramètres de formulaire dans la requête personnalisée "MyCustomRequest" :

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Exemple 3

L'exemple suivant copie trois paramètres de formulaire dans la requête personnalisée "MyCustomRequest" :

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Exemple 4

S'il existe plusieurs paramètres de formulaire du même nom, utilisez la syntaxe suivante :

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Cet exemple copie "f1", "f2" et la deuxième valeur de "f3". Si "f3" ne comporte qu'une seule valeur, le paramètre n'est pas copié.

Vous ne pouvez utiliser <FormParams> que lorsque les critères suivants sont remplis :

  • Verbe HTTP : POST
  • Type de message : réponse
  • Un des éléments suivants (ou les deux) :
    • Données de formulaire : défini sur une valeur ou sur "" (la chaîne vide). Par exemple, avec curl, ajoutez -d "" à votre requête.
    • En-tête Content-Length :défini sur 0 (si aucune donnée ne figure dans la requête d'origine, sinon, la longueur actuelle). Par exemple, avec curl, ajoutez -H "Content-Length: 0" à votre requête.

Lorsque vous copiez <FormParams>, <Copy> définit le Content-Type du message sur "application/x-www-form-urlencoded" avant de l'envoyer au service cible.

<Headers> (enfant de <Copy>)

Copie les en-têtes HTTP à partir du message de requête ou de réponse spécifié par l'attribut source de l'élément <Copy> vers le message de requête ou de réponse spécifié par l'élément <AssignTo>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <Header> ou tableau vide
Élément parent <Copy>
Éléments enfants <Header>

L'élément <Headers> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant copie l'en-tête user-agent de la requête dans le nouvel objet de requête personnalisé :

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Exemple 2

Pour copier tous les en-têtes, utilisez un élément <Headers> vide, comme le montre l'exemple suivant :

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Exemple 3

S'il existe plusieurs en-têtes portant le même nom, utilisez la syntaxe suivante :

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Cet exemple copie "h1", "h2" et la deuxième valeur de "h3". Si "h3" n'a qu'une seule valeur, le paramètre n'est pas copié.

<Path> (enfant de <Copy>)

Détermine si le chemin d'accès doit être copié de la requête source vers la requête de destination. Cet élément n'a aucun effet sur une réponse.

Si la valeur est "true", cette règle copie le chemin d'accès à partir du message de requête spécifié par l'attribut source de l'élément <Copy> vers le message de requête spécifié par l'élément <AssignTo>.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <Copy>
Éléments enfants Aucun

L'élément <Path> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant indique que la règle AssignMessage doit copier le chemin d'accès de la requête source vers le nouvel objet de requête personnalisé:

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Vous ne pouvez utiliser <Path> que lorsque les critères suivants sont remplis :

  • Type de message : Requête

<Payload> (enfant de <Copy>)

Détermine si la charge utile doit être copiée depuis la source vers la destination. La source et la destination peuvent être des requêtes ou des réponses.

Si la valeur est "true", cette règle copie la charge utile depuis le message spécifié par l'attribut source de l'élément <Copy> vers le message spécifié par l'élément <AssignTo>.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <Copy>
Éléments enfants Aucun

L'élément <Payload> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant définit <Payload> sur "true" afin que la charge utile de la requête soit copiée depuis la requête vers la réponse :

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (enfant de <Copy>)

Copie les paramètres de chaîne de requête depuis la requête spécifiée par l'attribut source de l'élément <Copy> vers la requête spécifiée par l'élément <AssignTo>. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <QueryParam> ou tableau vide
Élément parent <QueryParam>
Éléments enfants Aucun

L'élément <QueryParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant copie le paramètre de requête "my_param" de la requête vers un nouvel objet de requête personnalisé :

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Exemple 2

L'exemple suivant copie tous les paramètres de requête depuis la requête vers un nouvel objet de requête personnalisé :

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Exemple 3

S'il existe plusieurs paramètres de requête portant le même nom, utilisez la syntaxe suivante 

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Cet exemple copie "qp1", "qp2" et la deuxième valeur de "qp3". Si "qp3" n'a qu'une seule valeur, le paramètre n'est pas copié.

Vous ne pouvez utiliser <QueryParams> que lorsque les critères suivants sont remplis :

  • Verbe HTTP : GET
  • Type de message : Requête

<ReasonPhrase> (enfant de <Copy>)

Détermine si l'expression de motif doit être copiée depuis la réponse source vers la réponse de destination. Cet élément n'a aucun effet sur une requête.

Si la valeur est "true", cette règle copie l'élément ReasonPhrase depuis la réponse spécifiée par l'attribut source de l'élément <Copy> vers la réponse spécifiée par l'élément <AssignTo>.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <Copy>
Éléments enfants Aucun

L'élément <ReasonPhrase> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant définit <ReasonPhrase> sur "true", ce qui amène <Copy> à copier l'expression de motif depuis la réponse par défaut vers un objet de réponse personnalisé :

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

Vous ne pouvez utiliser <ReasonPhrase> que lorsque les critères suivants sont remplis :

  • Type de message : réponse

<StatusCode> (enfant de <Copy>)

Détermine si le code d'état est copié de la réponse source vers la réponse de destination. Cet élément n'a aucun effet sur une requête.

Si la valeur est "true", cette règle copie le code d'état depuis le message de réponse spécifié par l'attribut source de l'élément <Copy> vers le message de réponse spécifié par l'élément <AssignTo>.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <Copy>
Éléments enfants Aucun

L'élément <StatusCode> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant définit <StatusCode> sur "true", qui copie le code d'état depuis l'objet de réponse par défaut vers un nouvel objet de réponse personnalisé :

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

Vous ne pouvez utiliser <StatusCode> que lorsque les critères suivants sont remplis :

  • Type de message : réponse

Une utilisation courante de <StatusCode> consiste à s'assurer que la réponse du proxy a le même état que la réponse reçue de la cible lorsque l'attribut createNew de l'élément <AssignTo> est défini sur "true".

<Verb> (enfant de <Copy>)

Détermine si le verbe HTTP est copié depuis la requête source vers la requête de destination. Cet élément n'a aucun effet sur une réponse.

Si la valeur est "true", copie le verbe trouvé dans l'attribut source de l'élément <Copy> vers la requête spécifiée dans l'élément <AssignTo>.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <Copy>
Éléments enfants Aucun

L'élément <Verb> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant définit <Verb> sur "true", qui copie le verbe depuis la requête par défaut vers une nouvelle requête personnalisée :

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Vous ne pouvez utiliser <Verb> que lorsque les critères suivants sont remplis :

  • Type de message : Requête

<Version> (enfant de <Copy>)

Détermine si la version HTTP est copiée de la requête source vers la requête de destination. Cet élément n'a aucun effet sur une réponse.

Si la valeur est "true", copie la version HTTP trouvée dans l'attribut source de l'élément <Copy> dans l'objet spécifié par l'élément <AssignTo>.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <Copy>
Éléments enfants Aucun

L'élément <Version> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Exemple 1

L'exemple suivant définit <Version> sur "true" dans la requête, qui copie la version depuis l'objet de requête par défaut vers un nouvel objet de requête personnalisé :

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Vous ne pouvez utiliser <Version> que lorsque les critères suivants sont remplis :

  • Type de message : Requête

<DisplayName>

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, more natural-sounding name.

The <DisplayName> element is common to all policies.

Default Value n/a
Required? Optional. If you omit <DisplayName>, the value of the policy's name attribute is used
Type String
Parent Element <PolicyElement>
Child Elements None

The <DisplayName> element uses the following syntax:

Syntax

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Example

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

The <DisplayName> element has no attributes or child elements.

<IgnoreUnresolvedVariables>

Détermine si le traitement s'arrête lorsqu'une variable non résolue est rencontrée.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <AssignMessage>
Éléments enfants Aucun

Définissez la valeur sur true pour ignorer les variables non résolues et poursuivre le traitement, sinon false. La valeur par défaut est false.

Définir <IgnoreUnresolvedVariables> sur true n'a pas le même objet que définir l'élément continueOnError de <AssignMessage> sur true, car il est spécifique à la définition et à l'obtention de valeurs de variables. Si vous définissez continueOnError sur true, Edge ignore toutes les erreurs, pas seulement celles rencontrées lors de l'utilisation de variables.

L'élément <IgnoreUnresolvedVariables> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

Exemple 1

L'exemple suivant définit <IgnoreUnresolvedVariables> sur "true" :

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

Supprime les en-têtes, les paramètres de requête, les paramètres de formulaire et/ou la charge utile d'un message. Le message peut être une requête ou une réponse. Vous pouvez spécifier le message sur lequel agit <Remove> en utilisant l'élément <AssignTo>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <AssignMessage>
Éléments enfants <FormParams>
<Headers>
<Payload>
<QueryParams>

Un cas d'utilisation courant de <Remove> consiste à supprimer un paramètre de requête contenant des informations sensibles de l'objet de requête entrant afin d'éviter de le transmettre au serveur backend.

L'élément <Remove> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Exemple 1

L'exemple suivant supprime le corps du message de la réponse :

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Dans le flux de réponse, cette stratégie supprime le corps de la réponse, ne renvoyant que les en-têtes HTTP au client.

Exemple 2

L'exemple suivant supprime tous les paramètres de formulaire et un paramètre de requête de la requête entrante :

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (enfant de <Remove>)

Supprime les paramètres de formulaire spécifiés de la requête. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <FormParam> ou tableau vide
Élément parent <Remove>
Éléments enfants <FormParam>

L'élément <FormParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Exemple 1

L'exemple suivant supprime trois paramètres de formulaire de la requête :

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Exemple 2

L'exemple suivant supprime tous les paramètres de formulaire de la requête :

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Exemple 3

S'il existe plusieurs paramètres de formulaire du même nom, utilisez la syntaxe suivante :

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Cet exemple supprime "f1", "f2" et la deuxième valeur de "f3". Si "f3" n'a qu'une seule valeur, le paramètre n'est pas supprimé.

Vous ne pouvez utiliser <FormParams> que lorsque les critères suivants sont remplis :

  • Type de message : Requête
  • Content-Type : "application/x-www-form-urlencoded"

<Headers> (enfant de <Remove>)

Supprime les en-têtes HTTP spécifiés de la requête ou de la réponse, indiquée par l'élément <AssignTo>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <Header> ou tableau vide
Élément parent <Remove>
Éléments enfants <Header>

L'élément <Headers> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Exemple 1

L'exemple suivant supprime l'en-tête user-agent de la requête :

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Exemple 2

L'exemple suivant supprime tous les en-têtes de la requête :

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Exemple 3

S'il existe plusieurs en-têtes portant le même nom, utilisez la syntaxe suivante :

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Cet exemple supprime "h1", "h2" et la deuxième valeur de "h3" de la requête. Si "h3" n'a qu'une seule valeur, le paramètre n'est pas supprimé.

<Payload> (enfant de <Remove>)

Détermine si <Remove> supprime la charge utile dans la requête ou la réponse, spécifiée par l'élément <AssignTo>. Défini sur "true" pour effacer la charge utile, sinon "false". La valeur par défaut est "false".

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <Remove>
Éléments enfants Aucun

L'élément <Payload> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Exemple 1

L'exemple suivant définit <Payload> sur "true" pour que la charge utile de la requête soit effacée :

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (enfant de <Remove>)

Supprime les paramètres de requête spécifiés de la requête. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <QueryParam> ou tableau vide
Élément parent <Remove>
Éléments enfants <QueryParam>

L'élément <QueryParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Exemple 1

L'exemple suivant permet de supprimer un seul paramètre de requête de la requête :

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Exemple 2

L'exemple suivant supprime tous les paramètres de la requête :

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Exemple 3

S'il existe plusieurs paramètres de requête portant le même nom, utilisez la syntaxe suivante 

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Cet exemple supprime "qp1", "qp2" et la deuxième valeur de "qp3" de la requête. Si "qp3" n'a qu'une seule valeur, le paramètre n'est pas supprimé.

Exemple 4

L'exemple suivant supprime le paramètre de requête apikey de la requête :

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Vous ne pouvez utiliser <QueryParams> que lorsque les critères suivants sont remplis :

  • Verbe HTTP : GET
  • Type de message : Requête

<Set>

Définit les informations dans le message de requête ou de réponse, spécifié par l'élément <AssignTo>. <Set> écrase les en-têtes ou les paramètres déjà présents dans le message d'origine. Pour créer un en-tête ou un paramètre, utilisez l'élément <Add>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <AssignMessage>
Éléments enfants <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

L'élément <Set> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant montre l'élément <Set> :

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (enfant de <Set>)

Remplace les paramètres de formulaire existants sur une requête et les remplace par les nouvelles valeurs que vous spécifiez avec cet élément. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <FormParam>
Élément parent <Set>
Éléments enfants <FormParam>

L'élément <FormParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit un paramètre de formulaire appelé "myparam" sur la valeur de la variable request.header.myparam dans une nouvelle requête personnalisée :

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Vous ne pouvez utiliser <FormParams> que lorsque les critères suivants sont remplis :

  • Verbe HTTP : POST
  • Type de message : Requête

Si vous définissez des paramètres de formulaire vides dans votre règle (<Add><FormParams/></Add>), celle-ci n'ajoute aucun paramètre de formulaire. Cela revient à omettre le paramètre <FormParams>.

<Set> remplace le message Content-Type par "application/x-www-form-urlencoded" avant de l'envoyer au point de terminaison cible.

<Headers> (enfant de <Set>)

Remplace les en-têtes HTTP existants dans la requête ou la réponse, qui est spécifiée par l'élément <AssignTo>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <Header>
Élément parent <Set>
Éléments enfants <Header>

L'élément <Headers> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit l'en-tête user-agent sur la valeur de la variable request.header.user-agent :

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Si vous définissez des en-têtes vides dans votre stratégie (<Add><Headers/></Add>), la règle n'ajoute aucun en-tête. Cela revient à omettre <Headers>.

<Path> (enfant de <Set>)

<Payload> (enfant de <Set>)

Définit le corps du message pour une requête ou une réponse, spécifiée par l'élément <AssignTo>. La charge utile peut être n'importe quel type de contenu valide, tel que du texte brut, JSON ou XML.

Valeur par défaut chaîne vide
Obligatoire ? Facultatif
Type Chaîne
Élément parent <Set>
Éléments enfants Aucun

L'élément <Payload> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit une charge utile en texte brut :

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

Exemple 2

L'exemple suivant définit une charge utile JSON :

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

Exemple 3

L'exemple suivant insère des valeurs de variables dans la charge utile en plaçant les noms de variables entre accolades :

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

Dans les anciennes versions d'Apigee Edge, par exemple avant la version du cloud 16.08.17, vous ne pouviez pas utiliser les accolades pour désigner des références de variables dans les charges utiles JSON. Dans ces versions, vous deviez utiliser les attributs variablePrefix et variableSuffix pour spécifier des caractères de délimitation, et les utiliser pour encapsuler les noms de variables, comme ceci :

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

Cette ancienne syntaxe fonctionne toujours.

Exemple 4

Le contenu de <Payload> est traité comme un modèle de message. Cela signifie que la règle AssignMessage remplace les variables placées entre accolades par la valeur des variables référencées lors de l'exécution.

L'exemple suivant utilise la syntaxe avec accolades pour définir une partie de la charge utile sur une valeur de variable :

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

Le tableau suivant décrit les attributs de <Payload> :

Attribut Description Présence Type
contentType

Si elle est spécifiée, la valeur de contentType est attribuée à l'en-tête HTTP Content-Type.

Facultatif Chaîne
variablePrefix Spécifie éventuellement le délimiteur de début sur une variable de flux. La valeur par défaut est "{". Pour en savoir plus, consultez la documentation de référence sur les variables de flux. Facultatif Caractère
variableSuffix Spécifie éventuellement le délimiteur final à une variable de flux. La valeur par défaut est "}". Pour plus d'informations, consultez la documentation de référence sur les variables de flux. Facultatif Caractère

<QueryParams> (enfant de <Set>)

Remplace les paramètres de requête existants dans la requête par de nouvelles valeurs. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Tableau d'éléments <QueryParam>
Élément parent <Set>
Éléments enfants <QueryParam>

L'élément <QueryParams> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit le paramètre de requête "address" sur la valeur de la variable request.header.address :

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

Vous ne pouvez utiliser <QueryParams> que lorsque les critères suivants sont remplis :

  • Verbe HTTP : GET
  • Type de message : Requête

Si vous définissez des paramètres de requête vides dans votre règle (<Set><QueryParams/></Set>), celle-ci ne définit aucun paramètre de requête. Cela revient à omettre <QueryParams>.

<ReasonPhrase> (enfant de <Set>)

Définit l'expression de motif sur la réponse. Cela est normalement effectué pour le débogage en association avec <StatusCode>. Cet élément n'a aucun effet sur une requête.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <Set>
Éléments enfants Aucun

L'élément <ReasonPhrase> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit une expression de motif simple :

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Exemple 2

Le contenu de <ReasonPhrase> est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades est remplacé lors de l'exécution par la valeur de la variable référencée, comme le montre l'exemple suivant :

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Vous ne pouvez utiliser <ReasonPhrase> que lorsque les critères suivants sont remplis :

  • Type de message : réponse

<StatusCode> (enfant de <Set>)

Définit le code d'état sur la réponse. Cet élément n'a aucun effet sur une requête.

Valeur par défaut '200' (lorsque l'attribut createNew de l'élément <AssignTo> est défini sur "true")
Obligatoire ? Facultatif
Type Chaîne ou variable
Élément parent <Set>
Éléments enfants Aucun

L'élément <StatusCode> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit un code d'état simple :

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Exemple 2

Le contenu de <StatusCode> est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades est remplacé par la valeur de la variable référencée lors de l'exécution, comme illustré dans l'exemple suivant :

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Vous ne pouvez utiliser <StatusCode> que lorsque les critères suivants sont remplis :

  • Type de message : réponse

<Verb> (enfant de <Set>)

Définit le verbe HTTP sur la requête. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne ou variable
Élément parent <Set>
Éléments enfants Aucun

L'élément <Verb> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit un verbe simple sur la requête :

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Exemple 2

Le contenu de <Verb> est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades sera remplacé au moment de l'exécution par la valeur de la variable référencée.

L'exemple suivant utilise une variable pour renseigner un verbe :

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Vous ne pouvez utiliser <Verb> que lorsque les critères suivants sont remplis :

  • Type de message : Requête

<Version> (enfant de <Set>)

Définit la version HTTP sur une requête. Cet élément n'a aucun effet sur une réponse.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne ou variable
Élément parent <Set>
Éléments enfants Aucun

L'élément <Version> utilise la syntaxe suivante :

Syntaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Exemple 1

L'exemple suivant définit le numéro de version sur "1.1" :

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Exemple 2

La variable suivante utilise une variable entre accolades pour définir le numéro de version :

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Le contenu de <Version> est traité comme un modèle de message. Cela signifie qu'un nom de variable placé entre accolades sera remplacé lors de l'exécution par la valeur de la variable référencée.

Vous ne pouvez utiliser <Version> que lorsque les critères suivants sont remplis :

  • Type de message : Requête

Créer des messages de requête personnalisés

La règle AssignMessage vous permet de créer un message de requête personnalisé. Après avoir créé une requête personnalisée, vous pouvez l'utiliser de la manière suivante :

  • Accéder à ses variables dans d'autres règles
  • La transmettre à un service externe

Pour créer un message de requête personnalisé, utilisez l'élément <AssignTo> dans votre règle AssignMessage. Définissez createNew sur "true" et spécifiez le nom du nouveau message dans le corps de l'élément, comme le montre l'exemple suivant :

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Par défaut, Edge n'effectue aucune action par rapport au message de requête personnalisé. Une fois créé, Edge poursuit le flux avec la requête d'origine. Pour utiliser la requête personnalisée, ajoutez à votre proxy une règle telle que la règle ServiceCallout pouvant transmettre la requête personnalisée à un service externe.

Les exemples suivants créent des messages de requête personnalisés :

Exemple 1

L'exemple suivant crée un objet de requête personnalisé avec la règle d'attribution de messages :

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Cet exemple :

  • Crée un objet de message de requête appelé "MyCustomRequest".
  • Sur MyCustomRequest, cette règle :
    • Copie la valeur de l'en-tête HTTP user-agent depuis la requête entrante vers le nouveau message. Comme <Copy> utilise une référence absolue à la variable de flux user-agent, il n'est pas nécessaire de spécifier l'attribut source dans <Copy>.
    • Définit le paramètre de requête address du message personnalisé sur la valeur du paramètre de requête addy de la requête entrante.
    • Définit le verbe HTTP sur GET.
  • Définit <IgnoreUnresolvedVariables> sur "false". Lorsque la valeur de <IgnoreUnresolvedVariables> est "false", si l'une des variables que la règle tente d'ajouter n'existe pas, Edge interrompt le traitement dans le flux d'API.

Exemple 2

Voici un autre exemple illustrant la création d'un objet de requête personnalisé avec la règle d'attribution de messages :

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

Cet exemple crée une requête personnalisée appelée "partner.request". Il définit ensuite <Verb> et <Payload> sur la nouvelle requête.

Vous pouvez accéder à un message de requête personnalisé dans une autre règle AssignMessage qui intervient ultérieurement dans le flux. L'exemple suivant récupère la valeur de l'en-tête user-agent du message de requête personnalisé :

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

Vidéos

Regardez les vidéos suivantes pour en savoir plus sur la règle AssignMessage.

Vidéo Description
Pourquoi utiliser la règle d'attribution de messages Découvrez les avantages de la règle AssignMessage pour modifier la requête ou la réponse API sans modifier le code du backend.
Copier des éléments d'API à l'aide de la règle AssignMessage Copiez des éléments à partir d'une requête ou d'une réponse d'API, puis créez une nouvelle requête ou un objet de réponse à l'aide de la règle AssignMessage.
Supprimer des éléments d'API à l'aide de la règle AssignMessage Supprimez des éléments d'API et modifiez l'API avant qu'elle atteigne le backend cible à l'aide de la règle AssignMessage.
Ajouter et définir des éléments d'API à l'aide de la règle AssignMessage Modifiez la requête ou la réponse de l'API en ajoutant des paramètres de requête, des en-têtes, des paramètres de formulaire ou des charges utiles à l'aide de la règle AssignMessage.
Créer des variables personnalisées à l'aide de la règle AssignMessage Définissez des variables de flux personnalisées à l'aide de la règle AssignMessage et exploitez les variables d'autres règles dans le proxy d'API.
Créer des objets de requête ou de réponse à l'aide de la règle AssignMessage Créez des objets de requête ou de réponse d'API à l'aide de la règle AssignMessage au moment de l'exécution de l'API.
Créer une API fictive à l'aide de la règle AssignMessage Créez une simple API REST fictive en ajoutant la règle AssignMessage dans le flux de réponse.
Définir ou modifier la charge utile à l'aide de la règle AssignMessage Convertissez la requête REST en requête SOAP en définissant la charge utile SOAP à l'aide de la règle AssignMessage au moment de l'exécution de l'API.

Codes d'erreur

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.assignmessage.SetVariableFailed 500 The policy was not able to set a variable. See the fault string for the name of the unresolved variable.
steps.assignmessage.VariableOfNonMsgType 500

This error occurs if the source attribute in the <Copy> element is set to a variable which is not of type message.

Message type variables represent entire HTTP requests and responses. The built-in Edge flow variables request, response, and message are of type message. To learn more about message variables, see the Variables reference.

steps.assignmessage.UnresolvedVariable 500

This error occurs if a variable specified in the Assign Message policy is either:

  • out of scope (not available in the specific flow where the policy is being executed)
  • or
  • can't be resolved (is not defined)

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidIndex If the index specified in the <Copy> and/or <Remove> elements of the Assign Message policy is 0 or a negative number, then deployment of the API Proxy fails.
InvalidVariableName If the child element <Name> is empty or not specified in the <AssignVariable> element, then the deployment of the API proxy fails because there is no valid variable name to which to assign a value. A valid variable name is required.
InvalidPayload A payload specified in the policy is invalid.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. assignmessage.AM-SetResponse.failed = true

Example error response

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

Example fault rule

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

Schémas

Chaque type de règle est défini par un schéma XML (.xsd). Pour référence, des schémas de règles sont disponibles sur GitHub.

Articles associés

Des exemples fonctionnels de la règle AssignMessage sont disponibles dans les exemples de la plate-forme d'API.

Pour obtenir un exemple plus détaillé sur la manière de remplacer target.url dans ProxyEndpoint, consultez cet article de la communauté Apigee.

Pour voir un "chemin d'accès" en action dans une règle ServiceCallout, consultez cet exemple pratique dans les exemples Apigee sur GitHub. Il vous suffit de cloner le dépôt et de suivre les instructions de cet article. L'exemple utilise la règle AssignMessage pour définir un chemin de requête, puis une règle Service Callout pour envoyer la requête à un service externe.