Règle HTTPModifier

Quoi ?

La règle HTTPModifier peut modifier un message de requête ou de réponse existant.

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.
  • Supprimer des en-têtes, des paramètres de requête et des paramètres de formulaire d'un message.
  • Définir la valeur des propriétés existantes dans un message.

Avec HTTPModifier, vous pouvez ajouter, modifier ou supprimer les propriétés de la requête ou de la réponse. Vous pouvez également utiliser la règle HTTPModifier 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 HTTPModifier peut créer des variables de flux avec les éléments enfants suivants :

L'ordre dans lequel vous organisez les éléments <Add>, <Set> et <Remove> est important. La règle exécute ces actions dans l'ordre dans lequel elles apparaissent dans la configuration de la règle. Si vous devez supprimer tous les en-têtes, puis définir un en-tête spécifique, vous devez inclure l'élément <Remove> avant l'élément <Set>.

Cette règle est une règle standard qui peut être déployée sur n'importe quel type d'environnement. Tous les utilisateurs n'ont pas besoin de connaître les types de règles et d'environnements. Pour en savoir plus sur les types de règles et la disponibilité avec chaque type d'environnement, consultez la section Types de règles.

Élément <HTTPModifier>

Définit une règle HTTPModifier.

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

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

Syntaxe

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

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- All HTTPModifier 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>

  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>

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

  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<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>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</HTTPModifier>

Règle par défaut

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

<HTTPModifier continueOnError="false" enabled="true" name="http-modifier-default">
  <DisplayName>HTTP Modifier-1</DisplayName>
  <Properties/>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</HTTPModifier>

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

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

Attribut Par défaut Obligatoire ? Description
name ND Obligatoire

Nom interne de la règle. La valeur de l'attribut 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éfinissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles. Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle. Voir aussi :
enabled true Facultatif Définissez sur true pour appliquer la règle. Définissez sur false pour désactiver la règle. La règle ne sera pas appliquée même si elle reste associée à un flux.
async   faux Obsolète Cet attribut est obsolète.

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

Élément enfant Requis ? 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. Notez que <Set> fournit également cette fonctionnalité.

Pour écraser des en-têtes ou des paramètres existants, utilisez l'élément <Set>.

<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, ou en ajoute de nouveaux.

Autres éléments enfants
<AssignTo> Facultatif Spécifie le message sur lequel la règle HTTPModifier est appliquée. Il peut s'agir de la requête ou de la réponse standard, ou d'un nouveau message personnalisé.
<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 HTTPModifier :

1 : Ajouter un en-tête

L'exemple suivant ajoute un en-tête à la requête avec l'élément <Add>. La variable VerifyAPIKey de cet exemple est générée par la règle VerifyAPIKey :

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

2 : Modifier la réponse

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

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

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

3 : Supprimer le paramètre de requête

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

<HTTPModifier name="HM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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.

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

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

<Add>

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

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

Valeur par défaut ND
Requis ? Facultatif
Type Type complexe
Élément parent <HTTPModifier>
Éléments enfants <FormParams>
<Headers>
<QueryParams>

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

Syntaxe

<HTTPModifier
    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>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-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>
</HTTPModifier>

Exemple 2

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

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

Exemple 3

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

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

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

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

<FormParams> (enfant de <Add>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <FormParam>
Élément parent <Add>
Éléments enfants <FormParam>

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

Syntaxe

<HTTPModifier
    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>
</HTTPModifier>

Exemple 1

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

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

Exemple 2

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

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

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

Exemple 3

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

<HTTPModifier name="HM-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>
</HTTPModifier>

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 Debug pour consulter le flux. Le corps de la requête contient les données de formulaire encodées en URL qui ont été initialement transmises en tant que paramètres de chaîne de requête :

username=nick&zip_code=90210&default_language=en

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

  • Verbes HTTP : GET, POST
  • Type de message : Requête
  • Un des éléments suivants (ou les deux) :
    • Données de formulaire : défini sur une valeur, ou "" (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>, Apigee définit l'en-tête Content-Type de la requête sur application/x-www-form-urlencoded avant d'envoyer le message au service cible.

<Headers> (enfant de <Add>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <Header>
Élément parent <Add>
Éléments enfants <Header>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Add>
</HTTPModifier>

Exemple 1

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

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

<QueryParams> (enfant de <Add>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <QueryParam>
Élément parent <Add>
Éléments enfants <QueryParam>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</HTTPModifier>

Exemple 1

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

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

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

  • Verbes HTTP : GET, POST
  • 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 la règle HTTPModifier est appliquée. 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 HTTPModifier. Par exemple, vous ne pouvez pas utiliser <Add> ou <Set> pour ajouter ou modifier des paramètres de requête (<QueryParams>) ou des paramètres de formulaire (<FormParams>) sur la réponse. Vous ne pouvez manipuler que les paramètres de requête et les paramètres de formulaire sur la requête.

Valeur par défaut ND
Requis ? Facultatif
Type Chaîne
Élément parent <HTTPModifier>
Éléments enfants Aucune

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

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
</HTTPModifier>

Exemple 1

L'exemple suivant ne spécifie aucun message dans le texte du <AssignTo>. Cela implique que la règle agira sur le message request ou response, selon l'emplacement où la règle s'exécute.

<HTTPModifier name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>-- no-op -->
  ...
</HTTPModifier>

Si vous spécifiez createNew="false" et que vous ne fournissez pas explicitement de nom de message, les autres attributs de <AssignTo> ne sont pas pertinents. Dans ce cas, vous pouvez omettre complètement l'élément <AssignTo>.

Exemple 2

L'exemple suivant crée un objet de requête, en remplaçant l'objet existant :

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

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

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

Exemple 3

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

<HTTPModifier name="assignto-3">
  <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
  ...
</HTTPModifier>

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

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

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

Attribut Description nécessaire 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 (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 de type.

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

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

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

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

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

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

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

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

Facultatif String

<DisplayName>

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

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

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

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

Syntaxe

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Exemple

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

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

<IgnoreUnresolvedVariables>

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

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

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 <HTTPModifier> sur true car il est spécifique à la définition et à l'obtention de valeurs de variables. Si vous définissez continueOnError sur true, Apigee ignore toutes les erreurs, pas seulement celles rencontrées lors de l'utilisation de variables.

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</HTTPModifier>

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 ou les paramètres de formulaire d'un message. Un tag vide supprime tous les paramètres correspondants, y compris les en-têtes, les paramètres de formulaire et les paramètres de requête.

Le message affecté peut être une requête ou une réponse. Vous pouvez spécifier le message sur lequel agit <Remove> en utilisant l'élément <AssignTo>.

Valeur par défaut ND
Requis ? Facultatif
Type Type complexe
Élément parent <HTTPModifier>
Éléments enfants <FormParams>
<Headers>
<QueryParams>

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

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 2

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

<HTTPModifier name="HM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

<FormParams> (enfant de <Remove>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <FormParam> ou tableau vide
Élément parent <Remove>
Éléments enfants <FormParam>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Remove>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 2

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

<HTTPModifier name="HM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 3

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

<HTTPModifier name="HM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

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

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

<Headers> (enfant de <Remove>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <Header> ou tableau vide
Élément parent <Remove>
Éléments enfants <Header>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Remove>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 2

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

<HTTPModifier name="HM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 3

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

<HTTPModifier name="HM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

<QueryParams> (enfant de <Remove>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <QueryParam> ou tableau vide
Élément parent <Remove>
Éléments enfants <QueryParam>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 2

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

<HTTPModifier name="HM-remove-queryparams-2">
  &tl;Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 3

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

<HTTPModifier name="HM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

Exemple 4

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

<HTTPModifier name="HM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

  • Verbes HTTP : GET, POST
  • Type de message : Requête

<Set>

Définit les informations dans le message de requête ou de réponse, spécifié par l'élément <AssignTo>. <Set> écrase les en-têtes ou les paramètres de requête ou de formulaire qui existent déjà dans le message d'origine, ou en ajoute de nouveaux.

Les en-têtes et les paramètres de requête et de formulaire dans un message HTTP peuvent contenir plusieurs valeurs. Pour ajouter des valeurs supplémentaires à un en-tête ou à un paramètre, utilisez plutôt l'élément <Add>.

Valeur par défaut ND
Requis ? Facultatif
Type Type complexe
Élément parent <HTTPModifier>
Éléments enfants <FormParams>
<Headers>
<Path>
<QueryParams>
<StatusCode>
<Verb>
<Version>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <Path>PATH</Path>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</HTTPModifier>

Exemple

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.

<HTTPModifier name="HM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<FormParams> (enfant de <Set>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <FormParam>
Élément parent <Set>
Éléments enfants <FormParam>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Set>
</HTTPModifier>

Exemple 1

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

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

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

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

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

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

<Headers> (enfant de <Set>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <Header>
Élément parent <Set>
Éléments enfants <Header>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Set>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

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

<Path> (enfant de <Set>)

<QueryParams> (enfant de <Set>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Tableau d'éléments <QueryParam>
Élément parent <Set>
Éléments enfants <QueryParam>

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Set>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</HTTPModifier>

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

  • Verbes HTTP : GET, POST
  • Type de message : Requête

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

<StatusCode> (enfant de <Set>)

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

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

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

Syntaxe

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
  </Set>
</HTTPModifier>

Exemple 1

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

<HTTPModifier name="HM-set-statuscode-404">
  <Set>
    <StatusCode>404<<StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

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 :

<HTTPModifier name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

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

  • Type de message : réponse

<Verb> (enfant de <Set>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Chaîne ou VARIABLE
Élément parent <Set>
Éléments enfants Aucune

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

Syntaxe

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

Exemple 1

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

<HTTPModifier name="HM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Exemple 2

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

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

<HTTPModifier name="HM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

  • Type de message : Requête

<Version> (enfant de <Set>)

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

Valeur par défaut ND
Requis ? Facultatif
Type Chaîne ou VARIABLE
Élément parent <Set>
Éléments enfants Aucune

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

Syntaxe

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

Exemple 1

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

<HTTPModifier name="HM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
</HTTPModifier>

Exemple 2

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

<HTTPModifier name="HM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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 demande personnalisés

Vous pouvez utiliser la règle HTTPModifier pour 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 HTTPModifier. 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 :

<HTTPModifier name="assignto-3">
    <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
    ...
  </HTTPModifier>

Par défaut, Apigee n'effectue aucune action par rapport au message de requête personnalisé. Une fois créé, Apigee poursuit le flux avec la requête d'origine. Pour utiliser la requête personnalisée, ajoutez une règle utilisant le message de requête puis référencez explicitement le message de requête nouvellement créé dans la configuration de cette règle. Cela vous permet de transmettre la requête personnalisée à un point de terminaison de service externe.

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

Exemple 1

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

<HTTPModifier name="HTTPModifier-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</HTTPModifier>

Cet exemple :

  • Crée un objet de message de requête appelé MyCustomRequest.
  • Sur MyCustomRequest, cette règle :
    • 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 référencées dans la configuration de la règle n'existe pas, Apigee entre dans l'état d'erreur dans le flux d'API.

Exemple 2

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

<HTTPModifier name="HTTPModifier-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
  </Set>
</HTTPModifier>

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

Vous pouvez accéder aux différentes propriétés d'un message personnalisé dans une autre règle HTTPModifier qui se produit ultérieurement dans le flux. L'exemple suivant récupère la valeur d'un en-tête à partir d'une réponse personnalisée nommée et la place dans un nouvel en-tête du message de requête :

<HTTPModifier name="HM-Set-Header">
  <AssignTo>request</AssignTo>
  <Set>
    <Headers>
      <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header>
    </Headers>
  </Set>
</HTTPModifier>

Codes d'erreur

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

Erreurs d'exécution

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

Code d'erreur État HTTP Cause Corriger
entities.UnresolvedVariable 500 Variable de modèle de message non définie ou hors champ d'application.
steps.httpmodifier.InvalidStatusCode 500 La valeur résolue du code d'état n'est pas valide. Pour en savoir plus, consultez la chaîne d'erreur.

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 <Remove> de la règle HTTPModifier est 0 ou un nombre négatif, le déploiement du proxy d'API échoue.

Variables de panne

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

Variables Lieu Exemple
httpmodifier.POLICY_NAME.failed POLICY_NAME est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. httpmodifier.HM-SetResponse.failed = true

Exemple de réponse d'erreur

{
   "fault":{
      "detail":{
         "errorcode":"steps.httpmodifier.InvalidStatusCode"
      },
      "faultstring":"HTTPModifier[HM-SetResponse]: Invalid status code bad_request"
   }
}

Exemple de règle de défaillance

<FaultRule name="HTTPModifier Faults">
    <Step>
        <Name>HM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "InvalidStatusCode")</Condition>
    </Step>
    <Condition>(httpmodifier.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.