Modelo de objetos de JavaScript

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En este tema se describe el modelo de objetos de JavaScript de Apigee. Es importante que conozcas este modelo si tienes intención de usar la política de JavaScript para añadir JavaScript personalizado a un proxy de API.

Información sobre el modelo de objetos de JavaScript

El modelo de objetos de JavaScript define objetos con propiedades asociadas que están disponibles para el código JavaScript que se ejecuta en un flujo de proxy de Apigee. Usa la política de JavaScript para adjuntar este código personalizado a un flujo de proxy de API.

Los objetos definidos por este modelo tienen un ámbito dentro del flujo del proxy de API, lo que significa que determinados objetos y propiedades solo están disponibles en puntos específicos del flujo. Cuando se ejecuta tu código JavaScript, se crea un ámbito para la ejecución. En ese ámbito, se crean estas referencias de objetos:

  • context: objeto que proporciona acceso al contexto del mensaje.
  • Solicitud: abreviatura que permite acceder al objeto de solicitud.
  • response: abreviatura que permite acceder al objeto de respuesta
  • crypto: proporciona varias funciones hash.
  • print: función para emitir resultados.
  • properties: permite leer las propiedades de configuración de la política.

Objeto de contexto

El objeto context tiene un ámbito global. Está disponible en cualquier parte del flujo del proxy de la API. Tiene cuatro objetos secundarios: proxyRequest, proxyResponse, targetRequest y targetResponse. Estos objetos secundarios se limitan a la solicitud y la respuesta del entorno, ya sea la solicitud y la respuesta del proxy o la solicitud y la respuesta de destino. Por ejemplo, si la política de JavaScript se ejecuta en la parte del endpoint proxy del flujo, los objetos context.proxyRequest y context.proxyResponse están en el ámbito. Si el código JavaScript se ejecuta en un flujo de destino, los objetos context.targetRequest y context.targetResponse están en el ámbito.

El objeto context también tiene propiedades y métodos, que se describen en detalle en este tema. Por ejemplo, el siguiente código JavaScript usa la propiedad context.flow y llama a los métodos get/setVariable() en context.

if (context.flow=="PROXY_REQ_FLOW") {
     var username = context.getVariable("request.formparam.user");
     context.setVariable("USER.name", username);
}

Estos métodos interactúan directamente con las variables de flujo. El valor de la propiedad context.flow es el ámbito del flujo actual. En el flujo de solicitudes de proxy, se asigna a la constante PROXY_REQ_FLOW. Si en el flujo de respuesta de destino, se define como TARGET_RESP_FLOW. Esta constante es útil para ejecutar código específico de un ámbito. El getter te permite obtener variables de flujo y el setter te permite definir variables de flujo. Estas variables suelen estar disponibles en el flujo del proxy y otras políticas pueden usarlas.

Consulta más información y ejemplos en la referencia del objeto de contexto.

El objeto criptográfico

El objeto criptográfico añade compatibilidad criptográfica básica de alto rendimiento al modelo de objetos de JavaScript. Consulta la referencia del objeto criptográfico para obtener más detalles y ejemplos.

Objetos de solicitud y respuesta

Los objetos request y response son referencias abreviadas a la solicitud y la respuesta del entorno, ya sea la solicitud y la respuesta del proxy o la solicitud y la respuesta de destino. Los objetos a los que hacen referencia estas variables dependen del contexto en el que se ejecute la política de JavaScript. Si el código JavaScript se ejecuta en el flujo de un endpoint proxy, las variables de solicitud y respuesta hacen referencia a context.proxyRequest y context.proxyResponse. Si el código JavaScript se ejecuta en un flujo de destino, las variables hacen referencia a context.targetRequest y context.targetResponse.

El modelo de objetos de JavaScript incluye una función print() que puedes usar para mostrar información de depuración en la herramienta de depuración de Apigee. Consulta Depurar con instrucciones print() de JavaScript.

Objeto properties

Cuando se usa un elemento Properties en la configuración de la política, el código JavaScript puede acceder a los valores de esas propiedades mediante la variable properties.

Por ejemplo, si su configuración de JavaScript contiene lo siguiente:

<Javascript name='JS-1' >
  <Properties>
    <Property name="number">8675309</Property>
    <Property name="firstname">Jenny</Property>
  </Properties>
  <ResourceURL>jsc://my-code.js</ResourceURL>
</Javascript>

Después, en my-code.js, puedes hacer lo siguiente:

  print(properties.firstname);  // prints Jenny
  print(properties.number);  // 8675309

De forma más práctica, la configuración puede permitir que el código se comporte de forma diferente cuando se ejecute en entornos distintos, en momentos diferentes o por cualquier otro motivo.

Por ejemplo, en el siguiente ejemplo se especifica el "nombre de la variable" y el estilo de salida en el que JavaScript debe emitir información:

<Javascript name='JS-2' >
  <Properties>
    <Property name="output">my_output_variable</Property>
    <Property name="prettyPrint">true</Property>
  </Properties>
  <ResourceURL>jsc://emit-results.js</ResourceURL>
</Javascript>
Después, en emit-results.js, el código podría hacer lo siguiente:
var result = { prop1: "something", prop2 : "something else" } ;
if (properties.prettyPrint == "true") {
  context.setVariable(properties.output, JSON.stringify(result, null, 2));
}
else {
  context.setVariable(properties.output, JSON.stringify(result));
}

Referencia del objeto criptográfico

El objeto crypto te permite realizar funciones básicas de cifrado criptográfico en JavaScript.

El objeto criptográfico tiene un ámbito global. Está disponible en cualquier parte del flujo del proxy de API. Crypto te permite trabajar con estos objetos hash:

  • SHA-1
  • SHA256
  • SHA512
  • MD5

Trabajar con objetos SHA-1

Puede crear objetos SHA-1, actualizarlos y convertirlos en valores hexadecimales y base64.

Crea un objeto SHA-1

var _sha1 = crypto.getSHA1();

Actualizar un objeto SHA-1

Sintaxis

_sha1.update(value);

Parámetros

  • value: (cadena) cualquier valor de cadena.

Ejemplo

Actualiza un objeto SHA-1:

_sha1.update("salt_value");

_sha1.update("some text");

Devuelve el objeto SHA-1 como una cadena hexadecimal

var _hashed_token = _sha1.digest();

Devuelve el objeto SHA-1 como una cadena base64

var _hashed_token = _sha1.digest64();

Trabajar con objetos SHA-256

Puedes crear objetos SHA-256, actualizarlos y convertirlos en valores hexadecimales y base64.

Crea un objeto SHA-256.

var _sha256 = crypto.getSHA256();

Actualizar un objeto SHA-256

Sintaxis

_sha256.update(value);

Parámetros

  • value: (cadena) cualquier valor de cadena.

Ejemplo

Actualiza un objeto SHA-256:

_sha256.update("salt_value");

_sha256.update("some text");

Devuelve el objeto SHA-256 como una cadena hexadecimal.

var _hashed_token = _sha256.digest();

Devuelve el objeto SHA-256 como una cadena base64

var _hashed_token = _sha256.digest64();

Trabajar con objetos SHA-512

Puede crear objetos SHA-512, actualizarlos y convertirlos en valores hexadecimales y base64.

Crea un objeto SHA-512

var _sha512 = crypto.getSHA512();

Actualizar un objeto SHA-512

Sintaxis

_sha512.update(value);

Parámetros

  • value: (cadena) cualquier valor de cadena.

Ejemplo

Actualiza un objeto SHA-512:

_sha512.update("salt_value");

_sha512.update("some text");

Devuelve el objeto SHA-512 como una cadena hexadecimal

var _hashed_token = _sha512.digest();

Devuelve el objeto SHA-512 como una cadena base64

var _hashed_token = _sha512.digest64();

Trabajar con objetos MD5

Puedes crear objetos MD5, actualizarlos y convertirlos en valores hexadecimales y base64.

Crea un objeto MD5.

var _md5 = crypto.getMD5();

Actualizar un objeto MD5

Sintaxis

_md5.update(value);

Parámetros

  • value: (cadena) cualquier valor de cadena.

Ejemplo

Actualiza un objeto MD5:

_md5.update("salt_value");

_md5.update("some text");

Devuelve el objeto MD5 como una cadena hexadecimal

var _hashed_token = _md5.digest();

Devuelve el objeto MD5 como una cadena base64

var _hashed_token = _md5.digest64();

Compatibilidad con fechas y horas criptográficas

El objeto crypto admite patrones de formato de fecha y hora.

crypto.dateFormat()

Devuelve una fecha en formato de cadena.

Sintaxis

crypto.dateFormat(format, [timezone], [time])

Parámetros

  • format: (cadena) la implementación subyacente de este parámetro es java.text.SimpleDateFormat. Por ejemplo: "AAAA-MM-DD HH:mm:ss.SSS"
  • timezone: (cadena, opcional) La implementación subyacente de este parámetro es java.util.TimeZone. Este parámetro es el mismo. Valor predeterminado: UTC
  • time: (número, opcional) valor de marca de tiempo de Unix que se va a formatear. Valor predeterminado: hora actual

Ejemplos

Obtener la hora actual, hasta los milisegundos:

var _now = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS');

Obtener la hora actual de la zona horaria del Pacífico:

var _pst = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST');

Obtener el valor de diez segundos a partir de ahora:

var _timeNow = Number(context.getVariable('system.timestamp'));
var tenSeconds = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);

Ejemplos adicionales. Consulta también la documentación de java.text.SimpleDateFormat.

var _pst = crypto.dateFormat('M');
var _pst = crypto.dateFormat('EEE, d MMM yyyy HH:mm:ss Z');
var _pst = crypto.dateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

Usa getHash() para obtener cualquiera de los objetos de hash admitidos.

Ejemplos

var _hash1 = crypto.getHash('MD5');

var _hash2 = crypto.getHash('SHA-1');

var _hash3 = crypto.getHash('SHA-256');

var _hash4 = crypto.getHash('SHA-512');

Ejemplo con cifrado

try {
    // get values to use with hash functions
    var salt = context.getVariable("salt") || 'SomeHardCodedSalt';
    var host = context.getVariable("request.header.Host");
    var unhashedToken = "";

    var _timeNow = Number(context.getVariable('system.timestamp'));
    var now = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST', _timeNow);
    unhashed_token = "|" + now + "|" + host

    // generate a hash with the unhashedToken:
    var sha512 = crypto.getSHA512();
    sha512.update(salt);
    sha512.update(unhashedToken);

    // convert to base64
    var base64Token = sha512.digest64();

    // set headers
    context.setVariable("request.header.now", now);
    context.setVariable("request.header.token", base64Token);

} catch(e) {
    throw 'Error in Javascript';
}

Referencia del objeto de contexto

Se crea un objeto context para cada transacción de solicitud o respuesta que ejecuta un proxy de API. El objeto context expone métodos para obtener, definir y quitar variables relacionadas con cada transacción.

Las variables definen propiedades específicas de una transacción. La hora del día, la configuración regional del cliente que envía la solicitud, el user-agent del cliente que envía la solicitud y la URL del servicio de destino son ejemplos de variables disponibles en context. Por lo tanto, context es útil para crear una lógica que se base en estas propiedades para ejecutar un comportamiento personalizado.

Consulta la referencia de variables de flujo y la política ExtractVariables.

context object summary

En esta tabla se describe brevemente el objeto de contexto y sus elementos secundarios, y se enumeran las propiedades que están vinculadas a cada uno de ellos.

Nombre Descripción Propiedades
context Contenedor del contexto de la canalización de procesamiento de mensajes y de los flujos de solicitud y respuesta que ejecutan ProxyEndpoint y TargetEndpoint. flow, session
context.proxyRequest Objeto que representa el mensaje de solicitud entrante a ProxyEndpoint (desde la aplicación que realiza la solicitud al proxy de API). Encabezados, parámetros de consulta, método, cuerpo y URL
context.targetRequest Objeto que representa el mensaje de solicitud saliente de TargetEndpoint (del proxy de API al servicio de backend). Encabezados, parámetros de consulta, método, cuerpo y URL
context.targetResponse Objeto que representa el mensaje de respuesta de destino entrante (del servicio de backend al proxy de API) encabezados, contenido y estado
context.proxyResponse Objeto que representa el mensaje de respuesta del proxy saliente (del proxy de API a la aplicación que realiza la solicitud). encabezados, contenido y estado
context.flow El nombre del flujo actual. Consulta context.flow.
context.session Un mapa de pares nombre/valor que puedes usar para transferir objetos entre dos pasos diferentes que se ejecutan en el mismo contexto. Por ejemplo: context.session['key'] = 123. Para obtener más información sobre cuándo usar este objeto y cuándo no, consulta ¿Cuál es la diferencia entre context.session['hello'] = {} y context.setVariable("hello", {})?

Métodos del objeto context

context.getVariable()

Obtiene el valor de una variable predefinida o personalizada.

Sintaxis

context.getVariable("variable-name");

Ejemplo

Para obtener el valor del año actual, sigue estos pasos:

var year = context.getVariable('system.time.year');

context.setVariable()

Define el valor de una variable personalizada o de cualquier variable predefinida que se pueda escribir.

Sintaxis

context.setVariable("variable-name", value);

Ejemplo

Un caso habitual para definir una variable es cuando un proxy de API debe escribir dinámicamente la URL de destino. El siguiente código JavaScript obtiene el valor de una variable llamada USER.name, añade ese valor como parámetro de consulta a la URL http://mocktarget.apigee.net?user= y, a continuación, asigna ese valor a la variable predefinida target.url.

context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));

context.removeVariable()

Elimina una variable del contexto.

Sintaxis

context.removeVariable('variable-name');

Propiedades del objeto context

context.flow

La propiedad flow es una cadena que identifica el flujo del proxy de API actual. Esta propiedad se usa para indicar el flujo al que está adjunto el JavaScript. Los valores admitidos son:

  • PROXY_REQ_FLOW
  • PROXY_RESP_FLOW
  • TARGET_REQ_FLOW
  • TARGET_RESP_FLOW

Cada nombre de flujo abarca PreFlow, PostFlow y cualquier flujo condicional definido en los ProxyEndpoints o TargetEndpoints.

Esta propiedad opcional es útil cuando se ejecuta JavaScript común en más de un flujo, pero puede variar su comportamiento en función del flujo en el que se ejecute. Usa la propiedad Flow para los módulos de JavaScript que se vayan a reutilizar en varios proxies de API, en los que el código debe comprobar el flujo actual antes de ejecutar la lógica.

Ejemplo

Definir un encabezado HTTP solo en el flujo targetRequest:

if (context.flow=="TARGET_REQ_FLOW") {
     context.targetRequest.headers['TARGET-HEADER-X']='foo';
}

Define el contenido solo en el flujo proxyResponse:

if (context.flow=="PROXY_RESP_FLOW") {
     context.proxyResponse.content='bar';
}

context.session

Un mapa de pares nombre/valor que se puede usar para transferir objetos entre dos políticas que se ejecutan en el mismo contexto de mensaje.

Ejemplo

Definir un valor en la sesión:

context.session['key']  = 123;

Obtener el valor de la sesión:

var value = context.session['key']; // 123

Hijos del objeto de contexto

Como se muestra a continuación, un flujo de proxy de API completo abarca cuatro fases distintas, cada una de las cuales tiene un objeto de mensaje asociado que es un elemento secundario del objeto de contexto:

  • context.proxyRequest: mensaje de solicitud entrante recibido del cliente que realiza la solicitud.
  • context.targetRequest: mensaje de solicitud saliente enviado al servicio backend.
  • context.proxyResponse: mensaje de respuesta saliente devuelto al cliente que ha enviado la solicitud.
  • context.targetResponse: mensaje de solicitud entrante recibido del servicio backend.

Diagrama de una solicitud y una respuesta que pasan por un endpoint proxy y un endpoint de destino.

En las siguientes secciones se describen los métodos y las propiedades de estos objetos:

context.*Solicitar objetos secundarios

Por cada transacción HTTP que se ejecuta en un proxy de API, se crean dos objetos de mensaje de solicitud: uno de entrada (la solicitud del cliente) y otro de salida (la solicitud generada por el proxy de API y enviada al backend de destino).

El objeto context tiene objetos secundarios que representan estos mensajes de solicitud: context.proxyRequest y context.targetRequest. Estos objetos le permiten acceder a las propiedades del flujo de solicitudes que están en el ámbito cuando se ejecuta su código JavaScript.

Propiedades del objeto secundario context.*Request

Nombre de la propiedad Descripción
url

La propiedad url es una propiedad de lectura y escritura que combina el esquema, el host, el puerto, la ruta y los parámetros de consulta de targetRequest.

La URL completa de la solicitud se compone de las siguientes propiedades:

  • Protocolo: el protocolo de la URL (por ejemplo, HTTP o HTTPS).
  • Puerto: el puerto (por ejemplo, :80 o :443)
  • Host: el host de la URL (por ejemplo, www.example.com)
  • path: la ruta del URI (por ejemplo, /v1/mocktarget)

Al obtener url, se devuelve una URL con el siguiente formato:

protocol://host:port/path?queryParams

Ejemplos:

context.targetRequest.url = 'http://www.example.com/path?q1=1'
context.targetRequest.protocol ='https';
headers

Encabezados de solicitud HTTP como una asignación de String => List

Ejemplos:

Para esta solicitud HTTP:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
El siguiente código JavaScript:
context.proxyRequest.headers['Content-Type'];
context.proxyRequest.headers['Authorization'];

devolverá los siguientes valores

application/json
Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
queryParams

Los parámetros de consulta del mensaje de solicitud como una asignación de String => List.

Ejemplos:

"?city=PaloAlto&city=NewYork"

se puede acceder de la siguiente manera:

context.proxyRequest.queryParams['city'];  // == 'PaloAlto'
context.proxyRequest.queryParams['city'][0]     // == 'PaloAlto'
context.proxyRequest.queryParams['city'][1];    // == 'NewYork'
context.proxyRequest.queryParams['city'].length(); // == 2
method

El verbo HTTP (GET, POST, PUT o DELETE). PATCH, etc.) asociada a la solicitud.

Ejemplos:

Para esta solicitud:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z

El siguiente código JavaScript:

context.proxyRequest.method;

devolverá el siguiente valor:

POST
body

El cuerpo del mensaje (carga útil) de la solicitud HTTP.

El cuerpo de la solicitud tiene los siguientes miembros:

  • context.targetRequest.body.asXML;
  • context.targetRequest.body.asJSON;
  • context.targetRequest.body.asForm;

Ejemplos:

En el caso de un cuerpo XML:

<customer number='1'>
<name>Fred<name/>
<customer/>

Para acceder a los elementos del objeto XML, sigue estos pasos:

var name = context.targetRequest.body.asXML.name;

Para acceder a los atributos XML, usa la notación @.

var number = context.targetRequest.body.asXML.@number;

En el caso de un cuerpo de solicitud JSON:

{
"a":  1 ,
"b" : "2"
}
var a = context.proxyRequest.body.asJSON.a;    // == 1
var b = context.proxyRequest.body.asJSON.b;    // == 2

Para leer los parámetros de formulario, siga estos pasos:

"vehicle=Car&vehicle=Truck"
v0 = context.proxyRequest.body.asForm['vehicle'][0];
v1 = context.proxyRequest.body.asForm['vehicle'][1];

Objetos secundarios de context.*Response

Por cada transacción HTTP que se ejecuta en un proxy de API, se crean dos objetos de mensaje de respuesta: uno de entrada (la respuesta del servicio backend) y otro de salida (la respuesta que se envía al cliente).

El objeto de contexto tiene objetos secundarios que representan estos mensajes de respuesta: context.proxyResponse y context.targetResponse. Estos objetos le permiten acceder a las propiedades del flujo de respuesta que están en el ámbito cuando se ejecuta su código JavaScript.

Propiedades del objeto context.*Response

Nombre de la propiedad Descripción
headers

Los encabezados HTTP del mensaje de respuesta como una asignación de String => List.

Ejemplo:

var cookie = context.targetResponse.headers['Set-Cookie'];
status

El código de estado con el mensaje de estado como propiedad. Tanto el código de estado como el mensaje de estado están disponibles como propiedades.

Ejemplo:

var status = context.targetResponse.status.code;   // 200
var msg = context.targetResponse.status.message;   // "OK"
content

Cuerpo HTTP (contenido de la carga útil) del mensaje de respuesta.

El contenido de la respuesta tiene los siguientes miembros:

context.targetResponse.content.asXML;
context.targetResponse.content.asJSON;

Usar la notación .asXML

Hay una forma práctica de consultar un documento XML mediante la notación .asXML. En esta sección se describe cómo usar esta notación y en qué se diferencia de request.content y context.proxyRequest.content.

Por ejemplo:

request.content.asXML

o

context.proxyRequest.content.asXML

Ambos formularios, *.content y *.content.asXML, se pueden usar en un contexto de cadena y JavaScript los convertirá en cadenas. En el primer caso (*.content), la cadena incluye todas las declaraciones, así como los comentarios XML. En el segundo caso (*.content.asXML), el valor de cadena del resultado se limpia de declaraciones y comentarios.

Ejemplo

msg.content:

<?xml version="1.0" encoding="UTF-8"?>
<yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US">
   <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com"
   </yahoo:description>
</yahoo:error>
<!-- mg023.mail.gq1.yahoo.com uncompressed/chunked Sat Dec 14 01:23:35 UTC 2013 -->

msg.content.asXML:

<?xml version="1.0" encoding="UTF-8"?>
<yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US">
   <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com"
   </yahoo:description>
</yahoo:error>

Además, puede usar el formulario .asXML para recorrer la jerarquía XML especificando los nombres de los elementos y los atributos. No es posible recorrer la jerarquía con la otra sintaxis.

Depurar con instrucciones print() de JavaScript

Si usa la política de JavaScript para ejecutar código de JavaScript personalizado, tenga en cuenta que puede usar la función print() para mostrar información de depuración en la herramienta de depuración. Esta función está disponible directamente a través del modelo de objetos de JavaScript. Por ejemplo:

if (context.flow=="PROXY_REQ_FLOW") {
     print("In proxy request flow");
     var username = context.getVariable("request.queryparam.user");
     print("Got query param: " + username);
     context.setVariable("USER.name", username);
     print("Set query param: " + context.getVariable("USER.name"));
}


if (context.flow=="TARGET_REQ_FLOW") {
     print("In target request flow");
     var username = context.getVariable("USER.name");
     var url = "http://mocktarget.apigee.net/user?"
     context.setVariable("target.url", url + "user=" + username);
     print("Callout to URL: ", context.getVariable("target.url"));
}

Para ver el resultado, selecciona Output from all transactions (Salida de todas las transacciones) en la parte inferior de la ventana Debug (Depuración). También puede encontrar el resultado en la propiedad de depuración llamada stepExecution-stdout.

Hacer llamadas de JavaScript con httpClient

Usa httpClient para hacer varias solicitudes HTTP asíncronas y paralelas a cualquier URL desde código JavaScript personalizado que se ejecute en un flujo de proxy de API. El objeto httpClient se expone mediante el modelo de objeto JavaScript de Apigee.

Acerca de httpClient

El objeto httpClient se expone al código JavaScript personalizado que se ejecuta en Apigee a través del modelo de objetos de JavaScript. Para adjuntar JavaScript personalizado a un proxy de API, usa la política de JavaScript. Cuando se ejecuta la política, se ejecuta el código JavaScript personalizado.

El objeto httpClient es útil para desarrollar servicios compuestos o mashups. Por ejemplo, puedes consolidar varias llamadas de backend en un solo método de API.

A continuación, se muestra un patrón de uso básico. Crea una instancia de un objeto Request, asígnale una URL (por ejemplo, a un servicio backend al que quieras llamar) y llama a httpClient.send con ese objeto Request.

var myRequest = new Request();
myRequest.url = "http://www.example.com";
var exchangeObj = httpClient.send(myRequest);

Referencia de httpClient

El cliente HTTP expone dos métodos: get() y send().

httpClient.get()

Método de conveniencia para solicitudes HTTP GET sencillas, sin compatibilidad con encabezados HTTP.

Uso

var exchangeObj = httpClient.get(url);

Devoluciones

El método devuelve un objeto exchange. Este objeto no tiene propiedades y expone los siguientes métodos:

  • isError(): (booleano) devuelve true si httpClient no ha podido conectarse al servidor. Los códigos de estado HTTP 4xx y 5xx dan como resultado isError() false, ya que la conexión se ha completado y se ha devuelto un código de respuesta válido. Si isError() devuelve true, una llamada a getResponse() devuelve el undefined de JavaScript.
  • isSuccess(): (booleano) devuelve true si el envío se ha completado correctamente.
  • isComplete(): (booleano) devuelve true si la solicitud se ha completado.
  • waitForComplete(): pausa el hilo hasta que se complete la solicitud (correctamente o con un error).
  • getResponse(): (objeto) devuelve el objeto de respuesta si httpClient.send() se ha completado correctamente. El objeto devuelto tiene los mismos métodos y propiedades que el objeto context.proxyResponse. Consulta el resumen del objeto de contexto.
  • getError(): (cadena) si la llamada a httpClient.send() ha provocado un error, devuelve el mensaje de error como una cadena.

Ejemplo

Envía un objeto Request totalmente configurado que contenga las propiedades de la solicitud HTTP. Usa una retrollamada no bloqueadora para procesar la respuesta.

// Add the required the headers for making a specific API request
var headers = {'X-SOME-HEADER' : 'some value' };
// Make a GET API request along with headers
var myRequest = new Request("http://www.example.com","GET",headers);

// Define the callback function and process the response from the GET API request
function onComplete(response,error) {
 // Check if the HTTP request was successful
    if (response) {
      context.setVariable('example.status', response.status);
     } else {
      context.setVariable('example.error', 'Woops: ' + error);
     }
}

// Specify the callback Function as an argument
httpClient.get(myRequest, onComplete);

Usar la política de JavaScript

Usa la política de JavaScript para adjuntar código de JavaScript personalizado a un flujo de proxy. Consulta la política de JavaScript.

Temas relacionados