Ejemplos de código de GatewayScript

Ejemplo de fragmentos de código GatewayScript para ayudar a la creación de una política gatewayscript .

Atención:
  • Los mecanismos descritos aquí para interactuar con el contexto API Connect están pensados para pasarelas v5-compatible y también para proporcionar compatibilidad v5 para APIs creadas para la API Gateway. La pasarela v5-compatible no está disponible en API Connect Enterprise as a Service, por lo que debe utilizar los mecanismos descritos en Uso de variables de contexto en GatewayScript y políticas XSLT con el DataPower API Gateway. Para las API de API Gateway , las funciones v5-compatibility listadas aquí se deben utilizar sólo para la migración de v5 .
  • Las funciones de GatewayScript que se listan aquí utilizan el nombre común apim para llamar a los métodos. No obstante, puede cambiar el nombre común por uno de su elección utilizando una u otra de las siguientes llamadas de función, dependiendo de su tipo de pasarela:
    DataPower
    Gatewayvar name = require('local:///isp/policy/apim.custom.js');   // v5-Compatible Gateway
    DataPower API
    Gatewayvar name = require('apim');                                 // DataPower API Gateway
    donde nombre es el nombre que ha elegido. Por ejemplo:
    var apim = require('apim');

Acceder al contexto de ensamblaje

Los fragmentos de código siguientes muestran ejemplos de acceso al contexto de ensamblaje.

El ejemplo uno devuelve el contexto de request:

apim.getvariable('request');
El ejemplo dos devuelve la cabecera denominada myheader:
apim.getvariable('request.headers.myheader');
El ejemplo tres muestra cómo establecer, añadir o borrar una variable de contexto, en este caso una cabecera de mensaje:
apim.setvariable('message.headers.name', value, action)
donde
  • nombre es el nombre de la cabecera de mensaje que se desea establecer, añadir o borrar.
  • 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, especifique valor como request.headers.content-type. 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.

Para obtener una lista completa de variables de contexto, consulte Variables de contexto deAPI Gatewayy para obtener más información sobre cómo hacer referencia a variables de contexto en IBM API Connect , consulte Referencias de variables en API Connect. Si utiliza DataPower® API Gateway, consulte también Utilización de variables de contexto en las políticas GatewayScript y XSLT con DataPower API Gateway.

Acceso a las extensiones de OpenAPI en GatewayScript

El siguiente ejemplo muestra cómo acceder a extensiones personalizadas (como x-banking) en el documento OpenAPI (Swagger) desde GatewayScript:

if (context.swagger) {
    context.swagger.readAsJSON(function(error, swaggerDoc) {
        if (error) {
            // Handle error case
            context.set('message.body', error);
            context.message.statusCode = 500;
        }
 else {
    extensionContent = swaggerDoc["x-banking"]  
}

Leer entrada de forma síncrona

Los fragmentos de código siguientes muestran ejemplos de cómo leer la entrada de forma síncrona utilizando la función apim.getvariable para leer datos directamente desde un contexto. La entrada JSON se devuelve como un objeto JavaScript. Los datos XML se devuelven como un objeto NodeList (DOM).

El ejemplo uno devuelve una lectura síncrona del cuerpo de la solicitud original a la variable denominada json:

var json = apim.getvariable('request.body');
El ejemplo dos devuelve una lectura síncrona del mensaje actual a la variable denominada xml:
var xml = apim.getvariable('message.body');
Nota: Si el tipo de contenido de los datos no es XML ni JSON, la función apim.getvariable() devuelve un objeto NodeList que consta de un nodo binario, que debe convertirse en una serie. Si el contenido es realmente XML o JSON, debe analizar esta serie, tal como se muestra en el ejemplo siguiente:
var data = apim.getvariable('request.body');

// if a nodelist was returned and the type is 13 (BLOB/Binary Node), convert it
// to a Buffer, which can then be converted to a string
if ((data.item && data.length > 0 && data.item(0).nodeType === 13)) {
  data = data.item(0).toBuffer().toString();
}

// if the string really is XML or JSON, then now add code to parse it with
// the appropriate XML or JSON parse function
      .
      .
      .

Leer entrada de forma asíncrona

Los fragmentos de código siguientes muestran las llamadas apim.readInput() que puede utilizar para realizar una función de devolución de llamada JavaScript para leer datos de entrada de forma asíncrona en una variable. La entrada JSON se devuelve como un objeto JavaScript. Los datos XML se devuelven como un objeto NodeList (DOM). Otros tipos de entrada se devuelven como un objeto de almacenamiento intermedio.
apim.readInput(callback(err,input) {});
apim.readInputAsJSON(callback(err,json) {});
apim.readInputAsXML(callback(err,nodelist) {});
apim.readInputAsBuffer(callback(err,buffer) {});
Nota: La función apim.readInput() intenta determinar el tipo de datos de entrada y llamar a la función apim.readInputAstype() adecuada para devolver los datos en el formato correcto. Sin embargo, para asegurarse de que se devuelve el tipo de datos correcto, utilice la función apim.readInputAstype().

La función apim.readInputAstype() lee los datos del contexto INPUT (por ejemplo session.INPUT) o de un contexto de salida de política (por ejemplo policy.output), según si se había llamado una política anterior que había escrito salida en un contexto de salida de política. A continuación, esta función llama al método IBM DataPower GatewayScript readAstype subyacente en el contexto relevante para leer los datos y, a continuación, utiliza devoluciones de llamada JavaScript para devolver los datos a una variable. Para más información sobre DataPower consulte el modelo de programación Gateway y GatewayScript.

A continuación se proporciona un ejemplo de cómo utilizar la función de devolución de llamada apim.readInputAsJSON() para llevar datos a una variable llamada json:
apim.readInputAsJSON(function (error, json) {
if (error)
{
// handle error
}
else
{
// the json parameter will contain the json data that has been read
// process the json object in some way and write to the output context
if (json.test=='true') 
{
// if json data contains a variable called test that is set to true, then also add some test data
json.data = 'This is my test data'
}
session.output.write(json); 
// write to the output context
}
});

Configurar información de error

El bloque de código siguiente muestra un ejemplo de cómo configurar la implementación de política para generar información de error mediante la función apim.error(). En este ejemplo, MyError se genera en el flujo de ensamblaje. Si hay un manejador de capturas, captura este error; de lo contrario, el conjunto omite la ejecución del flujo y envía una respuesta 500 Internal Error .
apim.error('MyError', 500, 'Internal Error', 'Some error message');
donde:
  • MyError es el nombre del error.
  • 500 es el código HTTP del mensaje de error necesario.
  • Internal Error es la frase HTTP que explica el error.
  • Some error message es la acción sugerida para el usuario.

Acceso a la excepción interceptada en un bloque catch

El ejemplo siguiente muestra cómo puede, en el bloque catch de un ensamblaje de API, obtener los detalles de la excepción interceptada actual. Un posible uso sería crear una respuesta de error personalizada utilizando los detalles de la excepción interceptada.
let exception = apim.getError();
La función devuelve un objeto JSON; por ejemplo:
{
  "name": "OperationError",
  "message": "This is a thrown Operation Error",
  "policyTitle": "Throw Operation Error",
  "status": {
    "code": "500",
    "reason": "Internal Server Error"
  }
}

Escribir salida

El ejemplo siguiente muestra cómo escribir datos en la salida, en este caso los datos JSON '{ "status": "created" }', utilizando la variable session.output.write :
session.output.write('{ "status": "created" }');
La variable session.output.write es un método GatewayScript que escribe datos en el contexto de salida. Para más información, consulte Contextos y sesiones.
Utilice la función siguiente para establecer el formato del contenido que se graba en la variable session.output:
apim.output('application/type');
Por ejemplo, si estuviera creando una política que llamara lo siguiente:
session.output.write('<test>this is some xml data</test>');
la política escribiría datos XML en el contexto de salida. Debería configurar la política para llamar también lo siguiente:
apim.output('application/xml');
para indicar al sistema que la salida es XML. Puede provocar problemas en el proceso de la política que el formato de contexto de salida real y el formato especificado en apim.output, sean diferentes.
Nota: Si utiliza apim.setvariable para manipular message.body, debe seguir inmediatamente la llamada a función apim.setvariable con una llamada a función apim.output que especifique el tipo de contenido de la carga útil que ha escrito en message.body apim.setvariable.