Referencias de variable en API Connect
En API Connect puede hacer referencia a distintas variables en la definición de API.
Al definir una API, crear una política personalizada o configurar otra política o construcción lógica, puede incluir referencias a variables y propiedades de contexto.
Las referencias de variable se resuelven o bien cuando la API se despliega en un producto, para variables estáticas que se fijan en el despliegue, o bien cuando se llama la API, para variables que pueden cambiar con cada llamada de API.
Tipos de variable
- Variables de contexto
- Una variable de contexto es una variable relevante durante una llamada de API por ejemplo, la de la llamada, la vía de acceso de la llamada o el mensaje
durante la llamada. Una variable de contexto es una de las variables que conforman ese contexto determinado.
Las variables de contexto puede constar de más de una parte, por ejemplo request.headers.
Para obtener una lista de las variables de contexto disponibles, consulte Variables de contexto deAPI Connect.
- Propiedades de API
- Una propiedad de API es una variable de una API cuyo valor depende del catálogo en el que se despliega o publica la API. Al hacer referencia a una
propiedad de API, puede utilizar la misma definición de API en varios catálogos, existiendo pequeñas diferencias entre las instancias de la API entre los
catálogos. Por ejemplo, un ensamblado puede contener una construcción
ifque ejecuta su caso cuando se utiliza un Catálogo concreto, determinado a partir del valor de la propiedad API. Las propiedades de la API también se pueden utilizar para ocultar un valor como, por ejemplo, una contraseña, codificando el valor.Las propiedades de API se referencian por nombre.
Para obtener una lista de las propiedades de la API, consulte Propiedades de la API
Para obtener más información, consulte Establecimiento de propiedades de API (OpenAPI 2.0) o Establecimiento de propiedades de API (OpenAPI 3.0).
Nota: Una vez definida, una propiedad de API es de sólo lectura. - Propiedades de catálogo
- Una propiedad de catálogo es específica de un catálogo. Y se puede hacer referencia a él en cualquiera de las definiciones de API de ese Catálogo. Para obtener más información, consulte Creación y configuración de catálogos.
- Si cambia el valor de una propiedad de catálogo, cualquier API que haga referencia a esa propiedad se debe volver a publicar para que utilice el nuevo valor.
- Las propiedades del catálogo y las propiedades de API no están soportadas con las políticas globales. Por lo tanto, si utiliza dichas propiedades en una política global, no se sustituyen por los valores especificados en las definiciones de propiedades del catálogo o de la API.
Métodos de referenciación de variables
- Obtenga el valor de una variable de cualquiera de las maneras siguientes:
- A través de la política GatewayScript , ejecute la API
apim.getvariable().La política GatewayScript sólo está disponible con el " Premium subscription.
A través de la política GatewayScript , utilice la función context.get(); para obtener más información, consulte Utilización de variables de contexto en las políticas GatewayScript y XSLT con DataPower API Gateway.La política GatewayScript sólo está disponible con el " Premium subscription.
- A través de la política XSLT , ejecute una hoja de estilo que utilice la función de extensión
apim:getVariable.La política XSLT sólo está disponible con el ' Premium subscription.
- En un campo de política de ensamblaje que dé soporte a referencias de variable, utilice la sintaxis siguiente:
$(variable)
- A través de la política GatewayScript , ejecute la API
- Establezca el valor de una variable de cualquiera de las maneras siguientes:
- A través de la política Establecer variable .
- A través de la política GatewayScript , utilice la API
apim.setvariable().La política GatewayScript sólo está disponible con el " Premium subscription.
A través de la política GatewayScript , utilice la función context.set(); para obtener más información, consulte Utilización de variables de contexto en las políticas GatewayScript y XSLT con DataPower API Gateway.La política GatewayScript sólo está disponible con el " Premium subscription.
- A través de la política XSLT , ejecute una hoja de estilo que utilice el elemento de extensión
apim:setVariable.La política XSLT sólo está disponible con el ' Premium subscription.
- Referencias de GatewayScript
La política GatewayScript sólo está disponible con el " Premium subscription.
Cuando desee hacer referencia a una variable en un contexto de GatewayScript, utilice uno de los métodos siguientes:
donde variable es el nombre de la variable de contexto o la propiedad de API a la que desea hacer referencia.apim.getvariable(variable)
dondeapim.setvariable(variable, value, action)- variable es el nombre de la variable de contexto o la propiedad de API a la que desea hacer referencia.
- valor es el valor de la serie en el que desea establecer la variable. Puede tratarse de un valor literal u otra variable. Por ejemplo, para
establecer la variable con nombre en el valor de la cabecera Content-Type de una solicitud, utilice el código siguiente:
Esta propiedad sólo es necesaria cuando se especificavar contentType = apim.getvariable('request.headers.content-type'); apim.setvariable(variable, contentType, 'set');setoaddcomo acción. - action es la acción que desea aplicar a la variable. Las opciones válidas son:
setaddclear
set.
Utilice el método
getvariablepara recuperar el valor de una variable de contexto o una propiedad de API y el métodosetvariablepara cambiar uno.Algunas de las situaciones en las que puede utilizar este tipo de referencia son las siguientes:- GatewayScript . -Para obtener más información, consulte GatewayScript.
- Construcciones lógicas de
if. Para obtener más información, consulte if.
- Referencias de hoja de estilo
La política XSLT sólo está disponible con el ' Premium subscription.
Puede hacer referencia a una variable utilizando funciones y elementos en una política XSLT con la sintaxis siguiente:
donde variable es un valor de literal, otra variable o una sentencia XSLT XPath.<xsl:variable name="variable_name" select="apim:getVariable(variable)" />
donde<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 es el nombre de la variable de contexto o la propiedad de API a la que desea hacer referencia. Puede ser un valor de literal, otra variable o una sentencia XSLT XPath válida.
- valor es el valor de la serie en el que desea establecer la variable. Puede ser un valor de literal,
otra variable o una sentencia XSLT XPath válida. Esta propiedad sólo es necesaria cuando se especifica
setoaddcomo acción. - action es la acción que desea aplicar a la variable. Puede ser un valor de literal,
otra variable o una sentencia XSLT XPath válida. Las opciones válidas son:
setaddclear
set.
En el ejemplo siguiente se establece una variable con nombre en el valor de la cabecera Content-Type en una solicitud:<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>- Referencias en línea
- En muchas situaciones puede hacer una referencia más simple mediante la sintaxis siguiente:
donde variable es el nombre de la variable de contexto o la propiedad de API a la que desea hacer referencia.$(variable)Algunas de las situaciones en las que puede utilizar este tipo de referencia son las siguientes:- El URL es llamado por una política Invoke o Proxy. Para obtener más información sobre las políticas, consulte Invocar o Proxy.
- Una política Map . Para obtener más información, consulte Mapa.
Notas: La política de correlación puede hacer referencia a las variables siguientes en línea:Para obtener más información sobre el uso de referencias en línea y ejemplos, consulte la siguiente sección Acerca de las referencias en línea .- Variables definidas como entradas de la política de correlación y especificadas en el campo from de una correlación.
- Variable de contexto o propiedades de API, siempre que la propiedad de API
x-ibm-gateway-map-resolve-apic-variablesno esté establecida enfalse. Si una referencia en línea de una política de correlación se resuelve en una variable de contexto o una propiedad de API, se sustituye inmediatamente por el valor correspondiente. Para obtener más información sobre la propiedad de APIx-ibm-gateway-map-resolve-apic-variables, consulte Propiedades que controlan la política de correlación.
Acerca de las referencias en línea
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á configurada de la forma siguiente: invoke:
target-url: https://backend/GetPetInfo/$(request.parameters.storeid)/$(request.parameters.petid)el valor la propiedad
target-url se evalúa como https://backend/GetPetInfo/z03/285 y este es por lo tanto el URL al que la política
invoke envía su solicitud.condition de una política switch . Consulte el ejemplo siguiente:- 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 es
"test". Las referencias en línea se evalúan primero y, a continuación, las condiciones se evalúan como JavaScript. Por lo tanto, la primera condición se evalúa como "test" ==
"production", devolviendo false, y la segunda condición se evalúa como "test" == "test", devolviendo true, por lo que la política invoke envía su petición a http://testserver1.finance.com/stockquote.condition ; las dos condiciones de este ejemplo serían, por tanto, las siguientescondition: $(request.headers.X-Environment) == "production"ycondition: $(request.headers.X-Environment) == "test"condition , en su lugar puedes usar puro JavaScript, como sigue:- 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/stockquoteen cuyo caso la configuración de la política funciona correctamente tal cual en ambos tipos de pasarela.Para obtener más información sobre los tipos de pasarela, consulte Tipos de pasarela deAPI Connect.
set-variable:- set-variable:
actions:
- set: saved.reqHdrs
value: $(request.headers)
type: stringEn este caso, el objeto JSON estructurado request.headers se sustituye por su correspondiente representación de cadena, por lo que se crea una variable denominada reqHdrs , bajo el objeto saved , con un valor de cadena {"Content-Type":"application/json","X-Environment":"test",...}. Sin embargo, si utiliza DataPower API Gateway, puede especificar type: any, en cuyo caso la política set-variable copia el valor tal cual, y saved.reqHdrs se crea como un objeto JSON en lugar de una serie:- set-variable:
actions:
- set: saved.reqHdrs
value: $(request.headers)
type: any$(request.body.property_name)Por ejemplo, si la solicitud contiene { "account-number": 123 } o <account-number>123</account-number> puede
recuperar el valor 123 mediante la referencia en línea siguiente:$(request.body.account-number)Si el valor de propiedad
está dentro de una estructura de propiedad anidada, puede hacer referencia al mismo concatenando los nombres de propiedad. Por ejemplo si la solicitud contiene
{ "account": { "balance": 123 } } o <account><balance>123</balance></account> puede recuperar el
valor 123 mediante la referencia en línea siguiente:$(request.body.account.balance)Del mismo modo, puede hacer
referencia a una propiedad en una respuestas JSON o XML mediante la sintaxis siguiente:$(message.body.property_name)