Références de variables dans API Connect

Dans API Connect , vous pouvez référencer différentes variables dans votre définition d'API.

Lorsque vous définissez une API, créez une stratégie personnalisée ou configurez une autre stratégie ou construction logique, vous pouvez inclure des références à des variables contextuelles et des propriétés.

Les références de variable sont résolues dans de la mise en préproduction de l'API dans un produit, pour les variables statiques corrigées lors de la mise en préproduction ou lorsque l'API est appelée, pour les variables qui peuvent changer avec chaque appel API.

Types de variables

Variables contextuelles
Une variable contextuelle est une variable appropriée lors d'un appel API, comme l'entrée de l'appel, le chemin de l'appel ou le message lors de l'appel. Une variable contextuelle est l'une des variables qui constitue ce contexte particulier.

Les variables contextuelles peuvent consister en plusieurs composants, par exemple, request.headers.

Pour obtenir la liste des variables contextuelles disponibles, voir Variables contextuelles d'API Connect.

Propriétés d'API
Une propriété d'API est une variable dans une API dont la valeur dépend du catalogue dans lequel l'API est mise en préproduction ou publiée. En référençant une utilisation d'API, vous pouvez utiliser la même définition d'API dans différents catalogues lorsqu'il existe de légères différences entre les instances de l'API entre les catalogues. Par exemple, un assemblage peut contenir une construction if qui exécute son cas lorsqu'un catalogue particulier est utilisé, déterminé à partir de la valeur de la propriété API. Des propriétés d'API peuvent également être utilisées pour masquer une valeur telle qu'un mot de passe en la codant.

Les propriétés d'API sont référencées par leur nom.

Pour la liste des propriétés d'API, voir Propriétés d'API

Pour plus d'informations, voir Définition des propriétés d'API (OpenAPI 2.0) ou Définition des propriétés d'API (OpenAPI 3.0).

Remarque: une fois définie, une propriété d'API est en lecture seule.
Propriétés de catalogue
Une propriété de catalogue est spécifique à un catalogue et peut être référencée dans toute définition d'API de ce catalogue. Pour plus d'informations, voir Création et configuration de catalogues.
Remarques :
  • Si vous modifiez la valeur d'une propriété de catalogue, toute API référençant cette propriété doit alors être republiée pour utiliser la nouvelle valeur.
  • Les propriétés de catalogue et les propriétés d'API ne sont pas prises en charge avec des stratégies globales. Par conséquent, si vous utilisez ces propriétés dans une stratégie globale, elles ne sont pas remplacées par les valeurs spécifiées dans les définitions des propriétés du catalogue ou de l'API.

Méthodes de référencement des variables

Vous pouvez obtenir ou définir la valeur d'une variable référencée.
  • Obtenez la valeur d'une variable de l'une des façons suivantes :
    • Via la stratégie GatewayScript , exécutez l'API apim.getvariable() .

      La politique GatewayScript n'est disponible qu'avec le " Premium subscription.

    • DataPower API Gateway uniquementPar le biais de la stratégie GatewayScript , utilisez la fonction context.get() ; pour plus d'informations, voir Utilisation de variables contextuelles dans les stratégies GatewayScript et XSLT avec DataPower API Gateway.

      La politique GatewayScript n'est disponible qu'avec le " Premium subscription.

    • Via la stratégie XSLT , exécutez une feuille de style qui utilise la fonction d'extension apim:getVariable .

      La politique XSLT n'est disponible qu'avec le " Premium subscription.

    • Dans une zone de stratégie d'assemblage qui prend en charge les références de variable, utilisez la syntaxe suivante :
      $(variable)
  • Définissez la valeur d'une variable de l'une des façons suivantes :
Références GatewayScript

La politique GatewayScript n'est disponible qu'avec le " Premium subscription.

Si vous souhaitez référencer une variable dans un contexte GatewayScript, utilisez l'une des méthodes suivantes :
apim.getvariable(variable)
variable est le nom de la variable contextuelle ou de la propriété d'API que vous souhaitez référencer.
apim.setvariable(variable, value, action)
  • variable est le nom de la variable contextuelle ou de la propriété d'API que vous souhaitez référencer.
  • value est la valeur de chaîne que vous voulez affecter à la variable. Il peut s'agir d'une valeur littérale ou d'une autre variable. Par exemple, pour définir la variable nommée sur la valeur de l'en-tête Content-Type dans une demande, utilisez le code suivant :
    var contentType = apim.getvariable('request.headers.content-type');
    apim.setvariable(variable, contentType, 'set');
    Cette propriété n'est requise que si l'action spécifiée est set ou add.
  • action représente l'action à appliquer à la variable. Les options valides sont les suivantes :
    • set
    • add
    • clear
    Si aucune option n'est définie, l'option par défaut set est appliquée.

Utilisez la méthode getvariable pour extraire la valeur d'une variable contextuelle ou d'une propriété d'API et la méthode setvariable pour en modifier une.

Voici quelques cas dans lesquels vous utiliseriez ce type de référence :
  • Stratégies GatewayScript . -Pour plus d'informations, voir GatewayScript.
  • Constructions logiques if. Pour plus d'informations, voir si.
Références de feuille de style

La politique XSLT n'est disponible qu'avec le " Premium subscription.

Vous pouvez référencer une variable à l'aide de fonctions et d'éléments d'une stratégie XSLT avec la syntaxe suivante :
<xsl:variable name="variable_name" select="apim:getVariable(variable)" />
variable est une valeur littérale, une autre variable ou une instruction XSLT XPath valide.
<xsl:call-template name="apim:setVariable"> 
    <xsl:with-param name="varName" select="variable"/>
    <xsl:with-param name="value" select="value"/>
    <xsl:with-param name="action" select="action"/>
</xsl:call-template> 
  • variable est le nom de la variable contextuelle ou de la propriété d'API que vous souhaitez référencer. Il peut s'agir d'une valeur littérale, d'une autre variable ou d'une instruction XSLT XPath valide.
  • value est la valeur de chaîne que vous voulez affecter à la variable. Il peut s'agir d'une valeur littérale, d'une autre variable ou d'une instruction XSLT XPath valide. Cette propriété n'est requise que si l'action spécifiée est set ou add.
  • action représente l'action à appliquer à la variable. Il peut s'agir d'une valeur littérale, d'une autre variable ou d'une instruction XSLT XPath valide. Les options valides sont les suivantes :
    • set
    • add
    • clear
    Si aucune option n'est définie, l'option par défaut set est appliquée.
L'exemple suivant définit une variable nommée sur la valeur de l'en-tête Content-Type dans une demande :
<xsl:variable name="contentType" select="apim:getVariable('request.headers.content-type')" />
<xsl:call-template name="apim:setVariable"> 
    <xsl:with-param name="varName" select="'variable'"/>
    <xsl:with-param name="value" select="$contentType"/>
    <xsl:with-param name="action" select="'set'"/>
</xsl:call-template>
Références en ligne
Dans de nombreux cas, vous pouvez créer une référence plus simple, à l'aide de la syntaxe suivante :
$(variable)
variable est le nom de la variable contextuelle ou de la propriété d'API que vous souhaitez référencer.
Voici quelques cas dans lesquels vous utiliseriez ce type de référence :
  • Le site URL est appelé par une politique Invoke ou Proxy. Pour plus d'informations sur les stratégies, voir Appeler ou Proxy.
  • Une stratégie Map . Pour plus d'informations, voir Carte.
Remarques: la stratégie map peut faire référence aux variables suivantes en ligne:
  • Variables définies comme entrées de la stratégie de mappage et spécifiées dans la zone from d'un mappage.
  • Variables contextuelles ou propriétés d'API à condition que la propriété d'API x-ibm-gateway-map-resolve-apic-variables ne soit pas définie sur false. Si une référence en ligne d'une stratégie de mappage est convertie en une variable contextuelle ou propriété d'API, elle est immédiatement remplacée par la valeur correspondante. Pour plus d'informations sur la propriété d'API x-ibm-gateway-map-resolve-apic-variables , voir Propriétés contrôlant la stratégie map.
Pour plus d'informations sur l'utilisation des références en ligne et des exemples, voir la section A propos des références en ligne .

A propos des références en ligne

Lorsque vous utilisez une référence en ligne pour une valeur de propriété dans une stratégie d'assemblage, la référence de variable est remplacée par la valeur de chaîne correspondante lors de l'exécution, avant l'évaluation de la propriété. Prenons, par exemple, la demande entrante suivante, qui possède deux en-têtes et deux paramètres de requête (une commande curl est utilisée pour illustrer la demande) :
curl --data-binary @request.json \
   -H 'Content-Type: application/json' \
   -H 'X-Environment: test' \
   http://apiserver/org/catalog/petstore/getPetDetails?petid=285&storeid=z03
Si une stratégie invoke est configurée comme suit :
 invoke:
    target-url: https://backend/GetPetInfo/$(request.parameters.storeid)/$(request.parameters.petid)
alors la valeur de la propriété target-url est évaluée comme https://backend/GetPetInfo/z03/285, et de ce fait il s'agit de l'URL à laquelle la stratégie invoke envoie sa demande.
DataPower Gateway (Classic) uniquementVous pouvez également utiliser une référence en ligne dans la propriété condition d'une règle switch . Prenons l'exemple suivant :
- switch:
    case:
        - condition: "$(request.headers.X-Environment)" == "production"
            execute:
                - invoke:
                    http://www.finance.com/base/stockquote
        - condition: "$(request.headers.X-Environment)" == "test"
            execute:
                - invoke:
                    http://testserver1.finance.com/stockquote
Si l'on se réfère à la demande entrante précédente, la valeur de l'en-tête X-Environment est "test". Les références en ligne sont d'abord évaluées, puis les conditions sont évaluées en tant que JavaScript. Par conséquent, la première condition est évaluée comme étant "test" == "production", renvoyant false, et la deuxième condition est évaluée comme étant "test" == "test", renvoyant true, de sorte que la politique invoke envoie sa demande à http://testserver1.finance.com/stockquote.
Important: Cet exemple, qui enferme les références en ligne entre guillemets, suppose que l'API est déployée sur le DataPower API Gateway. Si vous déployez l'API sur le site DataPower Gateway (v5 compatible), les guillemets sont ajoutés implicitement lorsque les références en ligne sont évaluées, et vous devez donc les omettre dans la propriété condition ; les deux conditions de cet exemple seraient donc les suivantes
condition: $(request.headers.X-Environment) == "production"
et
condition: $(request.headers.X-Environment) == "test"
Cependant, au lieu d'utiliser une référence en ligne dans uncondition , vous pouvez utiliser à la place pure JavaScript, comme suit:
- switch:
    case:
        - condition: request.headers["X-Environment"] == "production"
            execute:
                - invoke:
                    http://www.finance.com/base/stockquote
        - condition: request.headers["X-Environment"] == "test"
            execute:
                - invoke:
                    http://testserver1.finance.com/stockquote
dans ce cas, la configuration de la politique fonctionne correctement telle quelle dans les deux types de passerelles.

Pour plus d'informations sur les types de passerelle, voir Types de passerelleAPI Connect.

Outre des chaînes simples, vous pouvez utiliser une référence en ligne pour un objet complet. Prenons l'exemple suivant qui utilise une référence en ligne dans une stratégie set-variable :
- set-variable:
    actions:
        - set: saved.reqHdrs
           value: $(request.headers)
           type: string
Ici, l'objet JSON structuré request.headers est remplacé par sa représentation sous forme de chaîne de caractères correspondante, et une variable nommée reqHdrs est donc créée, sous l'objet saved , avec une valeur sous forme de chaîne de caractères de {"Content-Type":"application/json","X-Environment":"test",...}. Toutefois, si vous utilisez DataPower API Gateway, vous pouvez spécifier type: any, auquel cas la règle set-variable copie la valeur en l'état et saved.reqHdrs est créé en tant qu'objet JSON au lieu d'une chaîne:
- set-variable:
    actions:
        - set: saved.reqHdrs
           value: $(request.headers)
           type: any
Vous pouvez référencer une propriété directement par nom dans une demande JSON ou XML, en utilisant la syntaxe suivante :
$(request.body.property_name)
Si, par exemple, la demande contient { "account-number": 123 } ou <account-number>123</account-number>, vous pouvez extraire la valeur 123 à l'aide de la référence en ligne suivante :
$(request.body.account-number)
Si la valeur de propriété se trouve dans une structure de propriété imbriquée, vous pouvez la référencer en concaténant les noms de propriété. Par exemple, si la demande contient { "account": { "balance": 123 } } ou <account><balance>123</balance></account>, vous pouvez extraire la valeur 123 en utilisant la référence en ligne suivante :
$(request.body.account.balance)
De la même manière, vous pouvez référencer une propriété dans une réponse JSON ou XML en utilisant la syntaxe suivante :
$(message.body.property_name)
Restriction : Si vous utilisez DataPower API Gateway, vous ne pouvez référencer des propriétés de cette manière que si le format de la demande ou de la réponse est JSON; le mécanisme n'est pas pris en charge par les formats de demande ou de réponse XML. Si vous utilisez le site DataPower Gateway (v5 compatible) , le mécanisme est pris en charge par les formats JSON et XML.