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 if que 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.
Notas:
  • 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

Puede obtener, o establecer, el valor de una variable referenciada.
  • 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.

    • Solo pasarela de API de DataPowerA 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)
  • Establezca el valor de una variable de cualquiera de las maneras siguientes:
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:
apim.getvariable(variable)
donde variable es el nombre de la variable de contexto o la propiedad de API a la que desea hacer referencia.
apim.setvariable(variable, value, action)
donde
  • 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:
    var contentType = apim.getvariable('request.headers.content-type');
    apim.setvariable(variable, contentType, 'set');
    Esta propiedad sólo es necesaria cuando se especifica set o add como acción.
  • action es la acción que desea aplicar a la variable. Las opciones válidas son:
    • set
    • add
    • clear
    Si no se establece ninguna opción, se aplica la opción predeterminada set.

Utilice el método getvariable para recuperar el valor de una variable de contexto o una propiedad de API y el método setvariable para 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:
<xsl:variable name="variable_name" select="apim:getVariable(variable)" />
donde variable es un valor de literal, otra variable o una sentencia XSLT XPath.
<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> 
donde
  • 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 set o add como 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:
    • set
    • add
    • clear
    Si no se establece ninguna opción, se aplica la opción predeterminada 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:
$(variable)
donde variable es el nombre de la variable de contexto o la propiedad de API a la que desea hacer referencia.
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:
  • 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-variables no esté establecida en false. 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 API x-ibm-gateway-map-resolve-apic-variables , consulte Propiedades que controlan la política de correlación.
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 .

Acerca de las referencias en línea

Cuando se utiliza una referencia en línea para un valor de propiedad en una política de ensamblaje, la referencia de variable se sustituye por el valor de serie correspondiente en tiempo de ejecución, antes de que se evalúe la propiedad. Por ejemplo, considere la solicitud de entrada siguiente que tiene dos cabeceras y dos parámetros de consulta (se utiliza un mandato curl para ilustrar la solicitud):
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 una política invoke 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.
Solo DataPower Gateway (Classic)También puede utilizar una referencia en línea en la propiedad 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/stockquote
Mediante la solicitud entrante a la que se ha hecho referencia anteriormente, el valor de la cabecera X-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.
Importante: Este ejemplo, que incluye las referencias en línea entre comillas dobles, presupone que la API se ha desplegado en DataPower API Gateway. Si despliega la API en DataPower Gateway (v5 compatible), las comillas dobles se añaden implícitamente cuando se evalúan las referencias en línea, por lo que debe omitirlas en la propiedad condition ; las dos condiciones de este ejemplo serían, por tanto, las siguientes
condition: $(request.headers.X-Environment) == "production"
y
condition: $(request.headers.X-Environment) == "test"
Sin embargo, como alternativa al uso de una referencia en línea en uncondition , 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/stockquote
en 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.

Además de series simples puede utilizar una referencia en línea para un objeto completo. Considere el ejemplo siguiente que utiliza una referencia en línea en una política set-variable:
- set-variable:
    actions:
        - set: saved.reqHdrs
           value: $(request.headers)
           type: string
En 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
Puede hacer referencia a una propiedad en una solicitud JSON o XML directamente por nombre utilizando la sintaxis siguiente:
$(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)
Restricción: Si está utilizando el DataPower API Gateway, puede hacer referencia a las propiedades de esta manera sólo si el formato de la solicitud o respuesta es JSON; el mecanismo no es compatible con los formatos de solicitud o respuesta XML. Si utiliza DataPower Gateway (v5 compatible) , el mecanismo es compatible con los formatos JSON y XML.