Acessar variáveis de fluxo no Node.js

Você está visualizando a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Introdução

Use o módulo apigee-access para acessar as variáveis de fluxo do Apigee Edge em um aplicativo Node.js. O módulo tem métodos para receber, definir e excluir variáveis. Ele também tem um método de conveniência para definir uma variável de número inteiro.

As variáveis de fluxo existem no contexto de um fluxo de proxy de API. Algumas variáveis são "integradas" ao Edge. Outras são criadas quando as políticas são executadas, e você pode criar suas próprias variáveis. As variáveis de fluxo geralmente são usadas para transmitir dados de uma política para outra e definir condições em fluxos condicionais. Para informações sobre as variáveis de fluxo, consulte Variáveis e condições de fluxo.

Para uma introdução ao módulo apigee-access e outros recursos, consulte Como usar o módulo apigee-access.

Exemplo de trabalho

Imagine que uma política do Edge em execução no caminho do fluxo de solicitação define uma variável chamada AuthenticatedUserId. O código a seguir acessa essa variável e a exibe em um registro. Além disso, esse código define uma variável. É possível acessar essa variável usando uma política, que ilustramos abaixo.

var http = require('http');
var apigee = require('apigee-access');

http.createServer(function (request, response) {
  // The request parameter must be a request object that came from the http module
  var userId = apigee.getVariable(request, 'AuthenticatedUserId');
  apigee.setVariable(request, "custom.foo", "Bar");
  console.log('Authenticated Apigee User ID is %s', userId);
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

Você pode copiar esse código em um arquivo JavaScript, implantá-lo no Edge e testá-lo. Chame o arquivo server.js. Para implantar, use:

apigeetool deploynodeapp -u username -p password -o myorg -e test -n access -d . -m server.js -b /access

Depois de implantar o aplicativo no Edge, adicione uma política "AssignMessage" com a seguinte configuração ao fluxo de solicitações do ProxyEndpoint:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="AddUserId">
    <DisplayName>AddUserId</DisplayName>
    <FaultRules/>
    <Properties/>  
    <AssignVariable>
        <Name>AuthenticatedUserId</Name>
        <Value>ntesla</Value>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Em seguida, anexe outra política AssignMessage ao pré-fluxo de resposta do TargetEndpoint:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="SetHeader">
    <DisplayName>SetHeader</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="MySpecialHeader">{custom.foo}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Você pode chamar o proxy da seguinte maneira:

curl -i http://myorg-test.apigee.net/access

Agora, vá para a página do proxy de acesso na IU de gerenciamento e abra a visualização Desenvolver. Clique em Node.js Logs para conferir a saída de registro do proxy. Se o proxy estiver configurado corretamente, você verá que a variável userId foi definida. Você também vai notar que o cabeçalho foi definido na saída do cURL na janela do terminal:

HTTP/1.1 200 OK

Content-Type: text/plain
Date: Tue, 27 05 2014 23:20:52 GMT
MySpecialHeader: Bar
Content-Length: 12
Connection: keep-alive

Métodos


getVariable

var result = getVariable(httpRequest, name);

Recebe uma variável nomeada.

Parâmetros:

  • httpRequest: o objeto de solicitação que vem do módulo http.
  • name: (string) o nome da variável a ser recuperada.

Retorna:

Uma string ou um número, dependendo do tipo que foi definido usando setVariable(), quando foi criado por você em outro lugar ou quando uma política o criou. Se você estiver acessando uma das variáveis do Edge prontas para uso, poderá encontrar uma lista de tipos na Referência de variáveis. Para tipos de variáveis criadas por políticas, consulte o tópico de referência da política específica.

Exemplos:

var apigee = require('apigee-access');
    // "httpRequest" must be a request object that came from the http module
    var val1 = apigee.getVariable(request, 'TestVariable');
    var val2 = apigee.getVariable(request, 'request.client.ip');

setVariable

setVariable(httpRequest, name, value);

Define uma variável. Algumas variáveis são somente leitura, e o método setVariable() gera uma exceção quando você tenta definir uma delas. Para determinar quais variáveis são somente leitura, consulte a Referência de variáveis.

Parâmetros:

  • httpRequest: o objeto de solicitação que vem do módulo http.
  • name: (string) o nome da variável a ser recuperada.
  • value: pode ser um número, uma string, um booleano, nulo ou indefinido.

Exemplo:

var apigee = require('apigee-access');
    apigee.setVariable(request, 'TestVariable', 'bar');
    // This will throw an exception because client.ip is read-only.
    apigee.setVariable(request, 'client.ip');
    

setIntVariable

setIntVariable(httpRequest, name, value);

O método setIntVariable() é um método prático que primeiro força o parâmetro de valor a um número inteiro e depois o define.

Parâmetros:

  • httpRequest: o objeto de solicitação que vem do módulo http.
  • name: (string) o nome da variável a ser definida.
  • value: o parâmetro de valor precisa ser uma string ou um número.

Exemplo:

var apigee = require('apigee-access');
// Convert "123" to an integer and set it
apigee.setIntVariable(request, 'TestVariable', '123');
// Use something that's already a number
apigee.setIntVariable(request, 'TestVariable2', 42);

deleteVariable

Exclui uma variável nomeada. É um erro excluir uma variável somente leitura. Para uma lista completa de variáveis somente leitura, consulte a Referência de variáveis.

deleteVariable(httpRequest, name);

Parâmetros:

  • httpRequest: o objeto de solicitação que vem do módulo http.
  • name: (string) o nome da variável a ser excluída.

Exemplo:

  apigee.deleteVariable(request, 'TestVariable');
    // This will throw an exception because client.ip is a read-only variable.
    apigee.deleteVariable(request, 'client.ip');