Règle AssignMessage

Vous consultez la documentation d'Apigee Edge.
Accédez à la documentation 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, généralement, vous ajoutez, modifiez ou supprimez les propriétés de la requête ou de la réponse. Cependant, 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 messages ou des variables de flux. Utilisez cette règle pour modifier les messages de requête avant de les envoyer via un proxy aux systèmes en amont, ou pour modifier les messages de réponse avant de les relayer aux applications consommatrices d'API.

É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 règle AssignMessage dans l'interface utilisateur 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.

Cet élément possède les attributs suivants qui sont communs à toutes les règles :

Attribut Par défaut Obligatoire ? Description
name N/A Obligatoire

Nom interne de la règle. La valeur de l'attribut name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion avec un nom différent, en langage naturel.

continueOnError faux Facultatif Défini sur "false" pour renvoyer une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles. Défini sur "true" pour que l'exécution du flux se poursuive même après l'échec d'une règle.
enabled vrai Facultatif Défini sur "true" pour appliquer la règle. Défini sur "false" pour "désactiver" la règle. La règle ne sera pas appliquée même si elle reste associée à un flux.
async   faux Obsolète Cet attribut est obsolète.

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

Élément enfant 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 name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

2 : Supprimer la charge utile

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

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

3 : Modifier la réponse

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

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

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

Comme cet exemple spécifie response comme nom de variable dans l'élément <AssignTo>, cette règle modifie l'objet de réponse initialement défini avec les données renvoyées par le serveur cible.

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

4 : Définir un contenu dynamique

Vous pouvez utiliser la règle 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="AM-set-dynamic-content">
  <AssignTo>response</AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false
  </IgnoreUnresolvedVariables>
</AssignMessage>

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

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

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

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="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

6 : Définir/obtenir des variables

L'exemple suivant utilise trois règles 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 name="AM-set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
</AssignMessage>

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

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

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

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

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

  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 name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

{calloutResponse.header.Set-Cookie.values}

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 :

Syntaxes1

<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 1s2

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Exemple 2s3

L'exemple suivant utilise l'élément <Headers> pour ajouter un en-tête partner-id à la requête qui sera envoyée au point de terminaison cible :

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Exemple 3s4

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Cet exemple utilise <Add> dans le flux de requêtes. Si vous consultez les résultats dans un outil tel que l'outil Trace, la requête envoyée à https://example-target.com/get devient https://example-target.com/get?myParam=42.

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

<FormParams> (enfant de <Add>)

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

Valeur par défaut 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 :

Syntaxes5

<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 1s6

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

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Exemple 2s7

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

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

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

Exemple 3s8

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Cet exemple récupère les paramètres de chaîne de requête de la requête d'origine et les ajoute en tant que paramètres de formulaire avec des noms différents. Ensuite, les paramètres de requête d'origine sont supprimés. Apigee envoie la requête modifiée au point de terminaison cible.

Vous pouvez utiliser 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 :

username=nick&zip_code=90210&default_language=en

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

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

Syntaxes9

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

Exemple 1s10

L'exemple suivant ajoute un en-tête partner-id au message de requête et attribue la valeur de la variable de flux verifyapikey.VAK-1.developer.app.partner-id à cet en-tête.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams> (enfant de <Add>)

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

Valeur par défaut 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 :

Syntaxes11

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

Exemple 1s12

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

  • 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>, ou si vous spécifiez l'élément <AssignTo>, mais ne spécifiez pas de valeur textuelle pour l'élément, la règle agit sur la requête ou la réponse par défaut, à savoir : en fonction de l'emplacement d'exécution de la règle. Si la règle s'exécute dans le flux de requête, elle a une incidence sur le message de la requête. Si elle s'exécute dans le flux de réponse, la règle affecte par défaut la réponse.

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

Syntaxes13

<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 1s14

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">
<!-- DO NOT do this -->
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Exemple 2s15

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

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

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

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

Exemple 3s16

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

<AssignMessage name="assign>to-<2"
  AssignTo createNew="true" transport=&&quot;http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo
/AssignMessage

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

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

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

Attribut Description 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 la valeur de texte de <AssignTo> renvoie un message, le traitement passe à l'étape suivante.
  • Si la valeur textuelle de <AssignTo> ne peut pas être résolue ou est associée à 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".

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. 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 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.
  • 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 à interpoler, afin d'obtenir la valeur à placer dans la variable de flux de destination.

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

Syntaxes17

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame
 <   Refso>urce_variable/Re<f
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=<9;tem>plate_variable<'/>Tem<plate
    Value>v<ariable_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 1s18

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

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

Exemple 2s19

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="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

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 3s20

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

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

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 :

Syntaxes21

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble<
    Namevariab>l<e_name/Name
  >/AssignVariable
/AssignMessage

Exemple 1s22

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

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

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]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame<
    Refsource_>v<ariable/Ref
  >/AssignVariable
/AssignMessage

Exemple 1s23

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="assignvariab>le-<4"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-ag<ent/Ref
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>oun<try/Ref
  /Assi>g<nVariable
/Ass>ignMessage

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 2s23

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="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

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

Exemple 3s24

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" nam>e=&<quot;assignvariable-3"
  AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/
>  I<gnoreUnresolve>dVari<able>strue
  /IgnoreUnres<olved>Varia<ble>s
  AssignVariable
 <   N>amere<quest>.querypa<ram.w/>Nam<e
    Refreques>t<.queryparam.w/>Ref
    Value12797282/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é sur 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é (à l'aide d'une règle 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 règle de sécurité.

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 :

Syntaxes25

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e" >
  AssignVariabl<e
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=&<#39;template_va>r<iable'/Tem>plate
  /AssignVariable
/AssignMessage

Exemple 1s26

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

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

Exemple 2s27

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

<AssignMessage name='AV-via-template-indirec>tly&#<39;  
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='my_templat>e_v<ariable'/
 > </AssignVariabl>e
/AssignMessage

Exemple 3s28

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='AV-template-with-fallb>ack<' 
 IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='>my_variable'{system.u<uid}-{mes>sag<eid}/Template
 > </AssignVariabl>e
/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 :

Syntaxes29

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   Na>mevariable_nam<e/Name>
  <  Valuevariable>_<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="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

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="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

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 où cette règle s'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>

Si vous ne spécifiez aucun élément enfant sous l'élément <Copy>, il copie toutes les parties du message source désigné.

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

Syntaxes30

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > name<="policy_name" 
    Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;for<mparam_value/FormParam
      ...<
    /Fo>rmParams
 <   !-- >Can als<o be an empty array (Head>ers/) --><
    He>aders
      Hea<der name>=&quo<t;he>ader_name&qu<ot;he>ader_<value/H>eader
      <...
    >/Head<ers
    Path[false|true]/Path
  <  Payload[fa>lse|true]/<Payload
   > !-- Ca<n also be an empty array (QueryPa>rams/) -->
  <  QueryPara>ms
      QueryP<aram name=&q>uot;q<ueryparam_na>me"quer<yparam_value/>Query<Param
    >  ...
    /Q<ueryParams<>/span>
    R<easo>nPhrase[fals<e|tru>e]/Re<asonPhr>ase
    Stat<usCode[f>als<e|tru>e]/<StatusCode
    Verb[false|true]/Verb<
   > Version[f>als<e|true]/Version
  /Copy
  !-- Used as the destination for the Copy values --
  A>ssignTo createNew="[<true|fals>e<]" transp>ort="http"
    type="[request|response]"destination_variable_name/AssignTo
/AssignMessage
  

Exemple 1s31

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

<AssignMessage name="AM-co>py-<1"
  AssignTo createNew="true" transport=&>quot;http&<quot; typ>e=&<quot;request"new>Reque<st/Assi>gnTo
  <Copy source="request&qu>ot;
 <   Heade>rs
  <    Header> name=&<quot;Header_Name_1"/
    /Head>ers
   < FormParams
      FormParam name=&q>uot;For<m_Param_Name_1"/
      FormPar>am na<me="Fo>rm_Pa<ram_>Name<_2&qu>ot;/
<      FormPa>ram< name>=<"Form_Par>am_Name_3"/
    /FormParams
    Pathtrue/Path
    QueryParams/
  /Copy
/AssignMessage

Comme les éléments tels que <Payload> et <Verb> ne sont pas présents, la règle ne copie pas ces parties du message.

Exemple 2s32

L'exemple suivant supprime d'abord tout le contenu du message response existant, puis copie toutes les valeurs d'un message différent appelé secondResponse dans le message response :

<AssignMessage name='AM-Copy-Respo>nse<'
  AssignTo createNew="false" transport=&quo>t;http&q<uot; type>=&q<uot;response"response/AssignTo
  !>-- <first r>emo<ve any existing values --
  Remove/
  !-- then copy eve>ryt<hing from the designated mess>a<ge --
  Copy s>ource="secondResponse"/
/AssignMessage

L'élément <Copy> possède un seul attribut :

Attribut Description Obligatoire ? Type
source

Spécifie l'objet source de la copie.

  • Si source n'est pas spécifié, la valeur par défaut sera message, qui prend une valeur différente en fonction du flux dans lequel la règle s'exécute. Si la règle s'exécute dans le flux de requête, la variable message fait référence à l'objet request. Si la règle s'exécute dans le flux de réponse, la variable message fait référence à l'objet response.
  • 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 :

Syntaxes33

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;f<ormpa>r<am_value/FormP>aram
      ...
    /FormParams
  /Copy
/AssignMessage

Exemple 1s34

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

<AssignMessage name="copy-formpara>ms-<1"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPa>ram name="par<amName&quo>t;For<m param val>ue <1/For>mPa<ram
    /FormParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

Exemple 2s35

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

<AssignMessage name="copy-formpara>ms-<2"
  Copy source>=&quo<t;request&q>uot<;
   > Fo<rmParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Exemple 3s36

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

<AssignMessage name="copy-formpara>ms-<3"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPara>m name=<"paramName1"/
    >  FormP<aram name="paramName2&q>uot;/<
      Form>Par<am na>me=<"paramName3"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

Exemple 4s37

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

<AssignMessage name="copy-formpara>ms-<4"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      >FormPar<am name="f1&quo>t;/
   <   FormParam name=&quo>t;f2&<quot;/
    >  F<ormPa>ram< name="f3.2"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; 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 :

Syntaxes38

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    >!-- Can al<so be a>n empty< array (Headers/) -->
>    Headers
<      H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header
      ...
    /Headers
  /Copy
/AssignMessage

Exemple 1s39

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-heade>rs-<1"
  Copy source>=&quo<t;reque>st"<;
    Headers
      Heade>r nam<e=">use<r-age>nt&<quot;/
    /Headers
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

Exemple 2s40

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

<AssignMessage name="copy-heade>rs-<2"
  Copy source>=&quo<t;reques>t&q<uot;<>/span>
   < Headers/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Exemple 3s41

Si plusieurs en-têtes portent le même nom, utilisez la syntaxe suivante :

<AssignMessage name="copy-heade>rs-<3"
  Copy source>=&quo<t;reque>st"<;
    Headers
   >   Head<er name="h1&>quot;/
<      Header name=&>quot;<h2">/
 <     >Hea<der name="h3.2"/
    /Headers
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; 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]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Path>[false|true]/Path
  /Copy
/AssignMessage

Exemple 1s42

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-pa>th-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    P>ath<true/Path
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"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 :

Syntaxes43

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Payload[fa>lse|true]/Payload
  /Copy
/AssignMessage

Exemple 1s44

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="AM-copy-paylo>ad-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Pa<yload>tru<e/Payloa>d
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/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 :

Syntaxes45

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !-- >Can also b<e an empty >array (<QueryParams/) --&gt;
    QueryPar>ams
      QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram
      ...
    /QueryParams
  /Copy
/AssignMessage

Exemple 1s46

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-querypara>ms-<1"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      QueryPa>ram n<ame="my>_pa<ram&q>uot<;/
    /QueryParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

Exemple 2s47

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-querypara>ms-<2"
  Copy source>=&quo<t;request&qu>ot;<
    >Que<ryParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Exemple 3s48

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

<AssignMessage name="copy-querypara>ms-<3"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      Qu>eryPara<m name="qp1">/
     < QueryParam name="q>p2&qu<ot;/
      Q>uer<yPara>m n<ame="qp3.2"/
    /QueryParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; 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 :

Syntaxes49

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[>request|resp<onse]"
 >   <Reaso>n<Phrase[false|t>rue]/ReasonPhrase
  /Copy
/AssignMessage

Exemple 1s50

L'exemple suivant définit <ReasonPhrase> sur true. Avec la source et l'élément <AssignTo>, comme spécifié, <Copy> copie l'expression de motif du message de réponse nommé dans l'objet response :

<AssignMessage name="AM-copy-reasonphra>se-<1"
  Copy source="serviceC>allou<tResponse&qu>ot;
<    ReasonPhr>ase<true/>Rea<sonPhras>e
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

Vous ne pouvez utiliser <ReasonPhrase> que lorsque les messages source et de destination sont de type Response.

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

Syntaxes52

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=">;[request|re<sponse]&quo>t;
<    S>t<atusCode[false>|true]/StatusCode
  /Copy
/AssignMessage

Exemple 1s53

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-statusco>de-<1"
  Copy source=>"<;response&>quot<;
    Statu>sCo<detru>e/S<tatusCode
  /Copy
  AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo
/AssignMessage

Vous ne pouvez utiliser <StatusCode> que lorsque les messages source et de destination sont de type Response.

Une utilisation courante de <StatusCode> consiste à définir une valeur de code d'état de la réponse du proxy différente de celle reçue de la cible.

<Verb> (enfant de <Copy>)

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

Si la valeur est "true", copie le verbe trouvé dans l'attribut source de l'élément <Copy> 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 :

Syntaxes54

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Verb>[false|true]/Verb
  /Copy
/AssignMessage

Exemple 1s55

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-ve>rb-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    V>erb<true/Verb
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"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 :

Syntaxes56

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Version[fa>lse|true]/Version
  /Copy
/AssignMessage

Exemple 1s57

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-versi>on-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Ve<rsion>tru<e/Version
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

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

  • Type de message : Requête

<DisplayName>

Utilisez-le, en plus de l'attribut name, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent et plus naturel.

L'élément <DisplayName> est commun à toutes les règles.

Valeur par défaut N/A
Requis ? Facultatif. Si vous omettez <DisplayName>, la valeur de l'attribut name de la règle est utilisée.
Type Chaîne
Élément parent <PolicyElement>
Éléments enfants Aucun

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

Syntaxe

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

Exemple

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

L'élément <DisplayName> ne comporte aucun attribut ni élément enfant.

<IgnoreUnresolvedVariables>

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

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

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

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

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

Syntaxes58

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name">; 
  IgnoreUnre<solvedVariables[true|false>]<
  /IgnoreUnre>solvedVariables
/AssignMessage

Exemple 1s59

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

<AssignMessage name="AM-Set-Hea>der<s&q>uot;
<  Set
 >   Head<ers
      Header name=&#>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er
 >   </Headers
  /Set
  IgnoreU>nresolv<edVariablestrue
  /IgnoreU>n<resolvedVariab>les
/AssignMessage

Comme <IgnoreUnresolvedVariables> est défini sur true, si la variable possibly-defined-variable n'est pas définie, cette règle ne génère pas d'erreur.

<Remove>

Supprime les en-têtes, les paramètres de requête, les paramètres de formulaire et/ou la charge utile d'un message. 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 ou un en-tête contenant des informations sensibles de l'objet de requête entrant afin d'éviter de le transmettre au serveur backend.

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

Syntaxes60

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam
      ...
    /Form<Params
 >   !-- Can< also b>e an em<pty array (Headers/) --&g>t;
    Heade<rs
    >  Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r
   <   ...
    /Headers
    Payload[<false|true]/>Payload
  <  !-- Can a>lso be <an empty array (QueryParams/) --&>gt;
    QueryPar<ams
      Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam
      ...
    /QueryParams
  /Remove
/AssignMessage

Exemple 1s61

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

<AssignMessage name="AM-remo>ve-<1"
  D>isplayNa<meremove-1/D>isp<layNam>e
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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 2s62

L'exemple suivant supprime tous les paramètres de formulaire et un paramètre de requête de l'objet request :

<AssignMessage name="AM-remo>ve-<2">;
  R<emove
    !<-- Empty (F>ormParams/) removes all form par>amete<rs --
    F>ormPa<rams/
    Q>ueryPar<ams
      QueryParam n>ame=&<quot;qp1&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

Exemple 3s63

L'exemple suivant supprime tout d'un objet de message :

<AssignMessage name="AM-remo>ve-<3">
  <Remove/
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

En règle générale, vous ne devez effectuer cette opération que si vous utilisez les éléments <Set> ou <Copy> pour définir des valeurs de remplacement dans le message.

<FormParams> (enfant de <Remove>)

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

Valeur par défaut 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 :

Syntaxes64

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_v<alue/Fo>r<mParam
      .>..
    /FormParams
  /Remove
/AssignMessage

Exemple 1s65

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

<AssignMessage name="AM-remove-formpara>ms-<1">;
  R<emove
    >FormPar<ams
      FormParam name=">;form_p<aram_1"/
      FormParam >name=&q<uot;form_param_2"/
      >FormP<aram name=&>quo<t;form_>par<am_3&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

Exemple 2s66

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

<AssignMessage name="AM-remove-formpara>ms-<2">;
  R<emove
    F>orm<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Exemple 3s67

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

<AssignMessage name="AM-remove-formpara>ms-<3">;
  R<emove
    >FormPar<ams
      FormParam >name=&q<uot;f1"/
      >FormPar<am name="f2">/
   <   FormPara>m n<ame=&qu>ot;<f3.2&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

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

Vous ne pouvez utiliser <FormParams> que 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]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can al>so be an e<mpty ar>ray (He<aders/) -->;
    Header>s
      Head<er name>="header_n<ame">;he<ader_va>l<ue/Header
    >  ...
    /Headers
  /Remove
/AssignMessage

Exemple 1s68

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

<AssignMessage name="AM-remove-one-he>ade<r">;
  R<emove
 >   Head<ers
      Header name=&qu>ot;us<er-agent>&qu<ot;/
  >  /<Headers
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

Exemple 2s69

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

<AssignMessage name="AM-remove-all-hea>der<s">;
  R<emove
  >  H<eaders/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Exemple 3s70

Si plusieurs en-têtes portent le même nom, utilisez la syntaxe suivante :

<AssignMessage name="AM-remove-heade>rs-<3">;
  R<emove
 >   Head<ers
      Header >name=&q<uot;h1"/
   >   Head<er name="h2&qu>ot;/
<      He>ade<r name=>&qu<ot;h3.2&>quot;/
<    /Head>e<rs
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

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

<Payload> (enfant de <Remove>)

Détermine si <Remove> supprime la charge utile dans la requête ou la réponse, spécifiée par l'élément <AssignTo>. Dé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]"
   > na<me=&qu>ot;po<licy_na>me" 
  <Remove
 >   <Payload>[<false|true]/Pa>yload
  /Remove
/AssignMessage

Exemple 1s71

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

<AssignMessage name="AM-remove-paylo>ad-<1">;
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

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

Syntaxes72

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also b>e an empty< array (Que>ryParam<s/) -->
    QueryParams
      >QueryParam name=<"query>param_name"<;queryparam_>val<ue/Quer>y<Param
      ..>.
    /QueryParams
  /Remove
/AssignMessage

Exemple 1s73

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

<AssignMessage name="AM-remove-querypara>ms-<1">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame=&qu<ot;qp1">/
 <     /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

Exemple 2s74

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

<AssignMessage name="AM-remove-querypara>ms-<2">;
  Rem<ove
      Qu>ery<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Exemple 3s75

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

<AssignMessage name="AM-remove-querypara>ms-<3">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame="<;qp1"/
        Qu>eryParam <name="qp2"/
  >      Q<ueryParam na>me=<"q>p3.<2"/>
      </QueryPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

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

Exemple 4s76

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

<AssignMessage name="AM-remove-query-p>ara<m">;
  R<emove
    Q>ueryPar<ams
      QueryParam name>=&quo<t;apikey&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/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 de requête ou de formulaire qui existent déjà dans le message d'origine. Les en-têtes et les paramètres de requête et de formulaire dans un message HTTP peuvent contenir plusieurs valeurs. Pour ajouter des valeurs supplémentaires à un en-tête ou à un paramètre, utilisez plutôt l'élément <Add>.

Valeur par défaut 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]"
   > na<me=>"<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am
    <  ...
    /FormParams
   > Headers
   <   Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader
      ...
    /Headers
    Pathpath/Path
    Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot;
   <     variableSuffix="suffix&>quot;new_payload</Payload
  >  QueryParams
 <     QueryPa>ram n<ame="qu>eryparam_name&quot;queryparam_<value/QueryPa>ram
 <     ...
 >   /QueryParams
    ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase
    StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e
 <   V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb
    Version[1.0|1.1|{variable}]/Verb
  /Set
/AssignMessage

Exemple 1s77

L'exemple suivant définit un en-tête spécifique. Lorsque cette règle est associée dans le flux de requête, elle permet au système en amont de recevoir un en-tête supplémentaire qui n'a pas été inclus dans la requête entrante d'origine.

<AssignMessage name="AM-Set-He>ade<r&q>uot;
<  Set
 >   Header<s
        Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader>
  <  /Heade>rs
  /S<et
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

Exemple 2s78

L'exemple suivant écrase la charge utile d'une réponse, ainsi que l'en-tête Content-Type.

<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot;
<  Set
    Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load
  /S>e<t
  AssignTore>sponse/AssignTo
/AssignMessage

<FormParams> (enfant de <Set>)

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

Valeur par défaut 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 :

Syntaxes79

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam
      .>..
    /FormParams
  /Set
/AssignMessage

Exemple 1s80

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

<AssignMessage name="AM-set-formpara>ms-<1&q>uot;
<  Set
    >FormPar<ams
      FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m
  >  /<FormParams
  /Set
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"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 :

Syntaxes81

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name&q<uot; 
  Set
    Headers
 >     Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
    >  ...
    /Headers
  /Set
/AssignMessage

Exemple 1s81

L'exemple suivant définit l'en-tête x-ratelimit-remaining sur la valeur de la variable ratelimit.Quota-1.available.count :

<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot;
<  Set
 >   Head<ers
      Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader>
  <  /Heade>rs
  /Se<t
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

Si vous définissez des en-têtes vides dans votre règle (<Set><Headers/></Set>), celle-ci ne définit aucun en-tête. Cela aura le même effet que d'omettre <Headers>.

<Path> (enfant de <Set>)

<Payload> (enfant de <Set>)

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

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

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

Syntaxes82

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name" 
  Set
    Payload contentType=&quot;content_type" variablePrefix=>"prefi<x"<>/span>
   <    > <variableSuffix>="suffix"new_payload/Payload
  /Set
/AssignMessage

Exemple 1s83

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

<AssignMessage name="set-paylo>ad-<1&q>uot;
<  Set
    Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload
 > /Set
/AssignMessage

Exemple 2s84

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

<AssignMessage name="set-paylo>ad-<2&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"}
    /Payload
  /Set
/AssignMessage

Exemple 3s85

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-paylo>ad-<3&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"}
    /Payload
  /Set
/AssignMessage

Dans les versions précédentes d'Apigee, 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-payloa>d-3<b&q>uot;
<  Set
    Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#"
      {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"}
    /Payload
  /Set
/AssignMessage

Cette ancienne syntaxe fonctionne toujours.

Exemple 4s86

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-paylo>ad-<4&q>uot;
<  Set
    Payload contentType=>"t<ext/>xml"<
 >     r<oot>
        <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 :

Syntaxes87

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_nam>e"< 
  Set
    QueryParams
      Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
      ..>.
    /QueryParams
  /Set
/AssignMessage

Exemple 1s88

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

<AssignMessage name="AM-set-querypara>ms<-1&>quot;<  Set
    Q>ueryPar<ams
      QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram<
   > </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 :

Syntaxes89

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name>" 
  Set
    ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase
  /Set
/AssignMessage

Exemple 1s90

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

<AssignMessage name="set-reasonphra>se-<1&q>uot;
<  Set
    Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase<
  /Set
  AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/
/AssignMessage

Exemple 2s91

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="AM-set-reasonphra>se-<2&q>uot;
<  Set
    Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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 :

Syntaxes92

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me" 
  Set
    StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode
  /Set
/AssignMessage

Exemple 1

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

<AssignMessage name="AM-set-statuscode>-40<4&q>uot;
<  Set
    >Sta<tusCode404/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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-statusco>de-<2&q>uot;
<  Set
    >StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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]"
   > na<me=>&quot<;pol>icy_name" 
  Set
    Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb
  /Set
/AssignMessage

Exemple 1s93

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

<AssignMessage name="AM-set-ve>rb-<1&q>uot;
<  Se>t
  <  Ver>bPO<ST/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Exemple 2s94

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

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

<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot;
<  Se>t
    Verb{my<_vari>abl<e}/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

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 :

Syntaxes95

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name" 
  Set
 <   Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb
  /Set
/AssignMessage

Exemple 1s96

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

<AssignMessage name="AM-set-versi>on-<1&q>uot;
<  Set
 >   <Version1>.1/<Vers>io<n
  /Set
 /Ass>ignMessage

Exemple 2

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

<AssignMessage name="AM-set-versi>on-<2&q>uot;
<  Set
 >   Version{m<y_versio>n}/<Vers>ion<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

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="AM-assign>to-2<" 
  AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo 
/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 1s97

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

<AssignMessage name="AssignMessa>ge-<3"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo
  Copy
    Headers
>     <Header n>ame<=&quo>t;u<ser>-agen<t"/
  >  /Head<ers
  /Copy
  Set
    Que>ryParams
      QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam
    /QueryParams
 >   VerbG<ET/Verb
  /Set
  IgnoreUnr>e<solvedVariable>sfalse
  /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 2s98

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="AssignMessa>ge-<2"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;>partn<er.r>eque<st/As>signT<o
  Set
    VerbPOST/Verb
    >Payload< conten><tType=&qu>ot;<text/xml&q><uot;
   >   re<questope>rat<ion1>0<5/operation/re>quest
    /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-ac>ces<s"
  D>isplayNamecustom-reques<t-1-access/D>isp<layName
>  AssignTopartn<er.reques>t/A<ssi>gnTo
<  Set
 >   Head<ers
      Header name="user-agentCop>yCustomRequest"{MyCustomReques<t.heade>r.use<r-agent}>/He<ader>
<    /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

Cette section décrit les codes d'erreur et les messages d'erreur qui sont renvoyés, ainsi que les variables d'erreur définies par Edge lorsque cette stratégie déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.

Erreurs d'exécution

Ces erreurs peuvent se produire lors de l'exécution de la règle.

Code d'erreur État HTTP Cause Corriger
steps.assignmessage.SetVariableFailed 500 La règle n'a pas pu définir de variable. Consultez la chaîne d'erreur pour le nom de la variable non résolue.
steps.assignmessage.VariableOfNonMsgType 500

Cette erreur se produit si l'attribut source de l'élément <Copy> est défini sur une variable qui n'est pas de type Message.

Les variables de type Message représentent des requêtes et des réponses HTTP entières. Edge intégré les variables de flux request, response et message sont de type message. Pour en savoir plus sur les variables de message, consultez la documentation de référence sur les variables.

steps.assignmessage.UnresolvedVariable 500

Cette erreur se produit si une variable spécifiée dans la règle AssignMessage est :

  • hors de portée (non disponible dans le flux spécifique où la règle est exécutée) ;
  • ou
  • impossible à résoudre (non définie),

Erreurs de déploiement

Ces erreurs peuvent se produire lorsque vous déployez un proxy contenant cette règle.

Nom de l'erreur Cause Corriger
InvalidIndex Si l'index spécifié dans les éléments <Copy> et/ou <Remove> de la règle AssignMessage est 0 ou un nombre négatif, le déploiement du proxy d'API échoue.
InvalidVariableName Si l'élément enfant <Name> est vide ou non spécifié dans l'élément <AssignVariable>, le déploiement du proxy d'API échoue, car il n'existe pas de nom de variable valide auquel attribuer une valeur. Vous devez indiquer un nom de variable valide.
InvalidPayload Une charge utile spécifiée dans la règle n'est pas valide.

Variables de panne

Ces variables sont définies lorsque cette règle déclenche une erreur au moment de l'exécution. Pour en savoir plus, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.

Variables Exemple
fault.name="fault_name" fault_name est le nom de l'erreur, tel qu'indiqué dans le tableau Erreurs d'exécution ci-dessus. Le nom d'erreur est la dernière partie du code d'erreur. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. assignmessage.AM-SetResponse.failed = true

Exemple de réponse d'erreur

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

Exemple de règle de défaillance

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

Schémas

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

Articles associés

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

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

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