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
ifqui 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.
- 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
- 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.
Par 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)
- Via la stratégie GatewayScript , exécutez l'API
- Définissez la valeur d'une variable de l'une des façons suivantes :
- Via la règle Définir des variables .
- A l'aide de la stratégie GatewayScript , utilisez l'API
apim.setvariable().La politique GatewayScript n'est disponible qu'avec le " Premium subscription.
Par le biais de la stratégie GatewayScript , utilisez la fonction context.set(); 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 l'élément d'extension
apim:setVariable.La politique XSLT n'est disponible qu'avec le " Premium subscription.
- 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 :
où variable est le nom de la variable contextuelle ou de la propriété d'API que vous souhaitez référencer.apim.getvariable(variable)
où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 :
Cette propriété n'est requise que si l'action spécifiée estvar contentType = apim.getvariable('request.headers.content-type'); apim.setvariable(variable, contentType, 'set');setouadd. - action représente l'action à appliquer à la variable. Les options valides sont les suivantes :
setaddclear
setest appliquée.
Utilisez la méthode
getvariablepour extraire la valeur d'une variable contextuelle ou d'une propriété d'API et la méthodesetvariablepour 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 :
où variable est une valeur littérale, une autre variable ou une instruction XSLT XPath valide.<xsl:variable name="variable_name" select="apim:getVariable(variable)" />
où<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
setouadd. - 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 :
setaddclear
setest 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 :
où variable est le nom de la variable contextuelle ou de la propriété d'API que vous souhaitez référencer.$(variable)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: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 .- 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-variablesne soit pas définie surfalse. 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'APIx-ibm-gateway-map-resolve-apic-variables, voir Propriétés contrôlant la stratégie map.
A propos des références en ligne
curl --data-binary @request.json \
-H 'Content-Type: application/json' \
-H 'X-Environment: test' \
http://apiserver/org/catalog/petstore/getPetDetails?petid=285&storeid=z03invoke 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.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/stockquoteX-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.condition ; les deux conditions de cet exemple seraient donc les suivantescondition: $(request.headers.X-Environment) == "production"etcondition: $(request.headers.X-Environment) == "test"condition , 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/stockquotedans 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.
set-variable :- set-variable:
actions:
- set: saved.reqHdrs
value: $(request.headers)
type: stringIci, 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$(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)