Modelo de objeto JavaScript

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

Este tópico aborda o modelo de objetos JavaScript do Apigee. É importante compreender este modelo se pretender usar a política de JavaScript para adicionar JavaScript personalizado a um proxy de API.

Acerca do modelo de objeto JavaScript

O modelo de objeto JavaScript define objetos com propriedades associadas que estão disponíveis para o código JavaScript em execução num fluxo de proxy do Apigee. Use a política de JavaScript para anexar este código personalizado a um fluxo de proxy de API.

Os objetos definidos por este modelo têm âmbito no fluxo do proxy da API, o que significa que determinados objetos e propriedades só estão disponíveis em pontos específicos do fluxo. Quando o seu JavaScript é executado, é criado um âmbito para a execução. Nesse âmbito, são criadas estas referências de objetos:

  • context: um objeto que fornece acesso ao contexto da mensagem
  • request: uma abreviatura que permite o acesso ao objeto de pedido
  • response: uma abreviatura que permite o acesso ao objeto de resposta
  • crypto: fornece várias funções hash
  • print: uma função para emitir resultados
  • properties: permite o acesso de leitura às propriedades de configuração na política

O objeto de contexto

O objeto context tem âmbito global. Está disponível em qualquer lugar no fluxo do proxy da API. Tem quatro objetos subordinados: proxyRequest, proxyResponse, targetRequest e targetResponse. Estes objetos secundários estão no âmbito do pedido e da resposta ambientais, quer seja o pedido e a resposta do proxy ou o pedido e a resposta de destino. Por exemplo, se a política de JavaScript for executada na parte do ponto final do proxy do fluxo, os objetos context.proxyRequest e context.proxyResponse estão no âmbito. Se o JavaScript for executado num fluxo de destino, os objetos context.targetRequest e context.targetResponse estão no âmbito.

O objeto context também tem propriedades e métodos, que são descritos detalhadamente neste tópico. Por exemplo, o seguinte exemplo de código JavaScript usa a propriedade context.flow e chama os métodos get/setVariable() em context.

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

Estes métodos interagem diretamente com as variáveis de fluxo. O valor da propriedade context.flow é o âmbito do fluxo atual. No fluxo de pedidos de proxy, está definido como a constante PROXY_REQ_FLOW. Se, no fluxo de resposta de destino, estiver definido como TARGET_RESP_FLOW. Esta constante é útil para executar código específico do âmbito. O getter permite-lhe obter variáveis de fluxo e o setter permite-lhe definir variáveis de fluxo. Geralmente, estas variáveis estão disponíveis no fluxo de proxy e podem ser consumidas por outras políticas.

Consulte a referência do objeto de contexto para ver mais detalhes e exemplos.

O objeto crypto

O objeto crypto adiciona suporte criptográfico básico de alto desempenho ao modelo de objeto JavaScript. Consulte a referência de objetos criptográficos para ver mais detalhes e exemplos.

Os objetos de pedido e resposta

Os objetos request e response são referências abreviadas ao pedido e à resposta do ambiente, quer seja o pedido e a resposta do proxy ou o pedido e a resposta de destino. Os objetos a que estas variáveis se referem dependem do contexto em que a política de JavaScript é executada. Se o JavaScript for executado no fluxo de um ponto final de proxy, as variáveis de pedido e resposta referem-se a context.proxyRequest e context.proxyResponse. Se o JavaScript for executado num fluxo de destino, as variáveis referem-se a context.targetRequest e context.targetResponse.

O modelo de objeto JavaScript inclui uma função print() que pode usar para gerar informações de depuração na ferramenta de depuração do Apigee. Consulte o artigo Depurar com declarações print() de JavaScript.

O objeto properties

Quando usar um elemento Properties na configuração da política, o código JavaScript pode aceder aos valores dessas propriedades através da variável properties.

Por exemplo, se a sua configuração JavaScript contiver:

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

Em seguida, em my-code.js, pode:

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

De forma mais prática, a configuração pode permitir que o código se comporte de forma diferente quando executado em ambientes diferentes, em momentos diferentes ou por qualquer motivo.

Por exemplo, o seguinte especifica o "nome da variável" e o estilo de saída para o qual o JavaScript deve emitir informações:

<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>
Em seguida, em emit-results.js, o código pode fazer o seguinte:
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));
}

Referência do objeto cripto

O objeto crypto permite-lhe executar funções de hash criptográficas básicas em JavaScript.

O objeto cripto tem âmbito global. Está disponível em qualquer lugar no fluxo do proxy de API. A API Crypto permite-lhe trabalhar com os seguintes objetos hash:

  • SHA-1
  • SHA256
  • SHA512
  • MD5

Trabalhar com objetos SHA-1

Pode criar objetos SHA-1, atualizá-los e convertê-los em valores hexadecimais e base64.

Crie um novo objeto SHA-1

var _sha1 = crypto.getSHA1();

Atualize um objeto SHA-1

Sintaxe

_sha1.update(value);

Parâmetros

  • valor: (string) qualquer valor de string.

Exemplo

Atualize um objeto SHA-1:

_sha1.update("salt_value");

_sha1.update("some text");

Devolve o objeto SHA-1 como uma string hexadecimal

var _hashed_token = _sha1.digest();

Devolve o objeto SHA-1 como uma string base64

var _hashed_token = _sha1.digest64();

Trabalhar com objetos SHA-256

Pode criar objetos SHA-256, atualizá-los e convertê-los em valores hexadecimais e base64.

Crie um novo objeto SHA-256

var _sha256 = crypto.getSHA256();

Atualize um objeto SHA-256

Sintaxe

_sha256.update(value);

Parâmetros

  • valor: (string) qualquer valor de string.

Exemplo

Atualize um objeto SHA-256:

_sha256.update("salt_value");

_sha256.update("some text");

Devolva o objeto SHA-256 como uma string hexadecimal

var _hashed_token = _sha256.digest();

Devolva o objeto SHA-256 como uma string base64

var _hashed_token = _sha256.digest64();

Trabalhar com objetos SHA-512

Pode criar objetos SHA-512, atualizá-los e convertê-los em valores hexadecimais e base64.

Crie um novo objeto SHA-512

var _sha512 = crypto.getSHA512();

Atualize um objeto SHA-512

Sintaxe

_sha512.update(value);

Parâmetros

  • valor: (string) qualquer valor de string.

Exemplo

Para atualizar um objeto SHA-512:

_sha512.update("salt_value");

_sha512.update("some text");

Devolve o objeto SHA-512 como uma string hexadecimal

var _hashed_token = _sha512.digest();

Devolva o objeto SHA-512 como uma string base64

var _hashed_token = _sha512.digest64();

Trabalhar com objetos MD5

Pode criar objetos MD5, atualizá-los e convertê-los em valores hexadecimais e base64.

Crie um novo objeto MD5

var _md5 = crypto.getMD5();

Atualize um objeto MD5

Sintaxe

_md5.update(value);

Parâmetros

  • valor: (string) qualquer valor de string.

Exemplo

Atualize um objeto MD5:

_md5.update("salt_value");

_md5.update("some text");

Devolve o objeto MD5 como uma string hexadecimal

var _hashed_token = _md5.digest();

Devolva o objeto MD5 como uma string base64

var _hashed_token = _md5.digest64();

Suporte de data/hora de criptomoedas

O objeto crypto suporta padrões de formatação de data/hora.

crypto.dateFormat()

Devolve uma data no formato de string.

Sintaxe

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

Parâmetros

  • format: (string) a implementação subjacente para este parâmetro é java.text.SimpleDateFormat. Por exemplo: "AAAA-MM-DD HH:mm:ss.SSS"
  • timezone: (string, opcional) A implementação subjacente deste parâmetro é java.util.TimeZone. Este parâmetro é o mesmo que o valor predefinido: UTC
  • tempo: (número, opcional) um valor de data/hora Unix a formatar. Predefinição: hora atual

Exemplos

Obter a hora atual, até aos milissegundos:

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

Saber a hora atual do fuso horário do Pacífico:

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

Obter o valor de dez segundos a partir de agora:

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

Exemplos adicionais. Consulte também a documentação 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");

Use getHash() para obter qualquer um dos objetos hash suportados

Exemplos

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

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

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

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

Exemplo com criptomoedas

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';
}

Referência do objeto de contexto

É criado um objeto context para cada transação de pedido/resposta executada por um proxy de API. O objeto context expõe métodos para obter, definir e remover variáveis relacionadas com cada transação.

As variáveis definem propriedades específicas de uma transação. A hora do dia, a localização do cliente que faz o pedido, o agente do utilizador do cliente que faz o pedido e o URL do serviço de destino são todos exemplos de variáveis disponíveis no context. Por conseguinte, context é útil para criar lógica que dependa destas propriedades para executar um comportamento personalizado.

Consulte a referência de variáveis de fluxo e a política ExtractVariables.

context object summary

Esta tabela descreve brevemente o objeto de contexto e os respetivos elementos subordinados, e apresenta as propriedades associadas a cada um.

Nome Descrição Propriedades
context Um contentor para o contexto do pipeline de processamento de mensagens e os fluxos de pedidos e respostas que são executados pelo ProxyEndpoint e TargetEndpoint. flow, sessão
context.proxyRequest Um objeto que representa a mensagem de pedido de entrada para o ProxyEndpoint (da app que faz o pedido para o proxy de API) cabeçalhos, parâmetros de consulta, método, corpo, URL
context.targetRequest Um objeto que representa a mensagem de pedido de saída do TargetEndpoint (do proxy de API para o serviço de back-end). cabeçalhos, parâmetros de consulta, método, corpo, URL
context.targetResponse Um objeto que representa a mensagem de resposta do destino de entrada (do serviço de back-end para o proxy de API) cabeçalhos, conteúdo, estado
context.proxyResponse Um objeto que representa a mensagem de resposta do proxy de saída (do proxy da API para a app que está a fazer o pedido) cabeçalhos, conteúdo, estado
context.flow O nome do fluxo atual. Consulte context.flow.
context.session Um mapa de pares nome/valor que pode usar para transmitir objetos entre dois passos diferentes executados no mesmo contexto. Por exemplo: context.session['key'] = 123. Para mais informações sobre quando e quando não usar este objeto, consulte Qual é a diferença entre context.session['hello'] = {} e context.setVariable("hello", {}).

Métodos de objetos context

context.getVariable()

Recupera o valor de uma variável predefinida ou personalizada.

Sintaxe

context.getVariable("variable-name");

Exemplo

Para obter o valor do ano atual:

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

context.setVariable()

Define o valor de uma variável personalizada ou de quaisquer variáveis predefinidas graváveis.

Sintaxe

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

Exemplo

Um cenário comum para definir uma variável é quando um proxy de API tem de escrever dinamicamente o URL de destino. O JavaScript seguinte obtém o valor de uma variável denominada USER.name, anexa esse valor como um parâmetro de consulta ao URL http://mocktarget.apigee.net?user= e, em seguida, define o valor target.url predefinido para esse valor.

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

context.removeVariable()

Remove uma variável do contexto.

Sintaxe

context.removeVariable('variable-name');

propriedades do objeto de contexto

context.flow

A propriedade flow é uma string que identifica o fluxo de proxy da API atual. Esta propriedade é usada para indicar o fluxo ao qual o JavaScript está anexado. Os valores suportados são:

  • PROXY_REQ_FLOW
  • PROXY_RESP_FLOW
  • TARGET_REQ_FLOW
  • TARGET_RESP_FLOW

Cada nome de fluxo abrange o PreFlow, o PostFlow e quaisquer fluxos condicionais definidos nos ProxyEndpoints ou TargetEndpoints.

Esta propriedade opcional é útil quando o JavaScript comum é executado em mais do que um fluxo, mas pode variar o respetivo comportamento consoante o fluxo no qual é executado. Use a propriedade Flow para módulos JavaScript destinados a serem reutilizados em vários proxies de API, nos quais o código é necessário para verificar o Flow atual antes de executar a lógica.

Exemplo

Defina um cabeçalho HTTP apenas no fluxo targetRequest:

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

Defina o conteúdo apenas no fluxo proxyResponse:

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

context.session

Um mapa de pares nome/valor que pode ser usado para transmitir objetos entre duas políticas em execução no mesmo contexto de mensagem.

Exemplo

Defina um valor na sessão:

context.session['key']  = 123;

Obtenha o valor da sessão:

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

context object children

Conforme mostrado abaixo, um fluxo de proxy de API completo abrange quatro fases distintas, cada uma das quais tem um objeto de mensagem associado que é um elemento secundário do objeto de contexto:

  • context.proxyRequest: a mensagem de pedido recebida do cliente que está a fazer o pedido.
  • context.targetRequest: a mensagem de pedido de saída enviada para o serviço de back-end.
  • context.proxyResponse: A mensagem de resposta de saída devolvida ao cliente que fez o pedido.
  • context.targetResponse: a mensagem de pedido recebida do serviço de back-end.

Diagrama de um pedido e uma resposta que passam por um ponto final de proxy e um ponto final de destino.

As secções seguintes descrevem os métodos e as propriedades destes objetos:

context.*Request child objects

Para cada transação HTTP executada num proxy de API, são criados dois objetos de mensagens de pedido: um de entrada (o pedido do cliente) e um de saída (o pedido gerado pelo proxy de API e enviado para o destino de back-end).

O objeto context tem objetos secundários que representam estas mensagens de pedido: context.proxyRequest e context.targetRequest. Estes objetos permitem-lhe aceder a propriedades no fluxo de pedidos que estão no âmbito quando o seu código JavaScript é executado.

context.*Request child object properties

Nome de propriedade Descrição
url

A propriedade url é uma propriedade de conveniência de leitura/escrita que combina o esquema, o anfitrião, a porta, o caminho e os parâmetros de consulta para o targetRequest.

O URL completo do pedido é composto pelas seguintes propriedades:

  • protocol: o protocolo do URL (por exemplo, HTTP, HTTPS)
  • porta: a porta (por exemplo, :80, :443)
  • host: o anfitrião do URL (por exemplo, www.example.com)
  • path: o caminho do URI (por exemplo, /v1/mocktarget)

Quando recebe url, é devolvido um URL no seguinte formato:

protocol://host:port/path?queryParams

Exemplos:

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

Cabeçalhos do pedido HTTP como um mapeamento de String => List

Exemplos:

Para este pedido HTTP:

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

devolve os seguintes valores

application/json
Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
queryParams

Os parâmetros de consulta da mensagem de pedido como um mapeamento de String => List.

Exemplos:

"?city=PaloAlto&city=NewYork"

pode ser acedido como:

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

O verbo HTTP (GET, POST, PUT, DELETE). PATCH, etc.) associado ao pedido

Exemplos:

Para esta solicitação:

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

O seguinte JavaScript:

context.proxyRequest.method;

devolve o seguinte valor

POST
body

O corpo da mensagem (carga útil) do pedido HTTP.

O corpo do pedido tem os seguintes membros:

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

Exemplos:

Para um corpo XML:

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

Para aceder aos elementos do objeto XML da seguinte forma:

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

Para aceder aos atributos XML, use a notação @.

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

Para um corpo do pedido JSON:

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

Para ler parâmetros de formulário:

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

context.*Response child objects

Para cada transação HTTP executada num proxy de API, são criados dois objetos de mensagens de resposta: um inbound (a resposta do serviço de back-end) e um outbound (a resposta enviada de volta ao cliente).

O objeto de contexto tem objetos secundários que representam estas mensagens de resposta: context.proxyResponse e context.targetResponse. Estes objetos permitem-lhe aceder a propriedades no fluxo de resposta que estão no âmbito quando o seu código JavaScript é executado.

context.*Response object properties

Nome de propriedade Descrição
headers

Os cabeçalhos HTTP da mensagem de resposta como um mapeamento de String => List.

Exemplo:

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

O código de estado com a mensagem de estado como propriedade. O código de estado e a mensagem de estado estão disponíveis como propriedades.

Exemplo:

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

O corpo HTTP (conteúdo de payload) da mensagem de resposta.

O conteúdo da resposta tem os seguintes membros:

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

Usar a notação .asXML

Existe uma forma prática de percorrer um documento XML através da notação .asXML. Esta secção descreve como usar esta notação e em que se diferencia de request.content e context.proxyRequest.content.

Por exemplo:

request.content.asXML

ou

context.proxyRequest.content.asXML

Ambos os formulários *.content e *.content.asXML podem ser usados num contexto de string, e o JavaScript vai forçá-los a tornarem-se strings. No primeiro caso (*.content), a string inclui todas as declarações, bem como comentários XML. No último caso (*.content.asXML), o valor da string do resultado é limpo de declarações e comentários.

Exemplo

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>

Além disso, pode usar o formulário .asXML para percorrer a hierarquia XML, especificando os nomes dos elementos e atributos. Não é possível percorrer a hierarquia usando a outra sintaxe.

Depure com declarações print() de JavaScript

Se estiver a usar a política de JavaScript para executar código JavaScript personalizado, tenha em atenção que pode usar a função print() para enviar informações de depuração para a ferramenta de depuração. Esta função está disponível diretamente através do modelo de objeto JavaScript. Por exemplo:

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 o resultado, selecione Resultado de todas as transações na parte inferior da janela de depuração. Também pode encontrar o resultado na propriedade de depuração denominada stepExecution-stdout.

Criar chamadas de JavaScript com httpClient

Use httpClient para fazer vários pedidos HTTP assíncronos e paralelos a qualquer URL a partir de código JavaScript personalizado executado num fluxo de proxy de API. O objeto httpClient é exposto pelo modelo de objeto JavaScript do Apigee.

Acerca de httpClient

O objeto httpClient é exposto ao código JavaScript personalizado executado no Apigee através do modelo de objeto JavaScript. Para anexar JavaScript personalizado a um proxy de API, use a política JavaScript. Quando a política é executada, o código JavaScript personalizado é executado.

O objeto httpClient é útil para desenvolver serviços compostos ou mashups. Por exemplo, pode consolidar várias chamadas de back-end num único método API.

Segue-se um padrão de utilização básico. Instancie um objeto Request, atribua-lhe um URL (por exemplo, a um serviço de back-end que quer chamar) e chame httpClient.send com esse objeto Request.

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

Referência httpClient

O cliente HTTP expõe dois métodos: get() e send().

httpClient.get()

Um método prático para pedidos HTTP GET simples, sem suporte para cabeçalhos HTTP.

Utilização

var exchangeObj = httpClient.get(url);

Devoluções

O método devolve um objeto exchange. Este objeto não tem propriedades e expõe os seguintes métodos:

  • isError(): (booleano) devolve true se o httpClient não conseguir estabelecer ligação ao servidor. Os códigos de estado HTTP 4xx e 5xx resultam em isError() false, uma vez que a ligação foi concluída e foi devolvido um código de resposta válido. Se isError() devolver true, uma chamada para getResponse() devolve o undefined JavaScript.
  • isSuccess(): (Booleano) Devolve true se o envio tiver sido concluído e tiver êxito.
  • isComplete(): (Booleano) Devolve true se o pedido estiver concluído.
  • waitForComplete(): pausa a discussão até que o pedido seja concluído (com êxito ou erro).
  • getResponse(): (objeto) devolve o objeto de resposta se o httpClient.send() estiver concluído e for bem-sucedido. O objeto devolvido tem os métodos e as propriedades idênticos ao objeto context.proxyResponse. Consulte o resumo do objeto de contexto.
  • getError(): (string) Se a chamada para httpClient.send() tiver resultado num erro, devolve a mensagem de erro como uma string.

Exemplo

Envie um objeto Request totalmente configurado que contenha as propriedades do pedido HTTP. Use uma chamada de retorno não bloqueadora para processar a resposta.

// 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 a política de JavaScript

Use a política JavaScript para anexar código JavaScript personalizado a um fluxo de proxy. Consulte a política de JavaScript.

Tópicos relacionados