Acessar variáveis de fluxo no Node.js

Você está vendo 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, configurar e excluir variáveis. Ele também tem um método de conveniência para configurar 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 normalmente são usadas para transmitir dados de uma política para outra e para definir condições em fluxos condicionais. Para informações sobre variáveis de fluxo, consulte Variáveis e condições de fluxo.

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

Exemplo de trabalho

Imagine que uma política de borda executada no caminho do fluxo de solicitação defina uma variável chamada AuthenticatedUserId. O código a seguir acessa essa variável e a imprime em um registro. Além disso, esse código define uma variável. É possível acessar essa variável a partir de uma política, ilustrada 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/');

É possível copiar esse código em um arquivo JavaScript, implantá-lo no Edge e testá-lo. Chame o arquivo server.js. Para implantá-lo, 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 AttributionMessage 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 AttributionMessage ao pré-fluxo de resposta de 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 desta forma:

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

Agora, acesse a página do proxy de acesso na IU de gerenciamento e abra a visualização Desenvolver. Clique em Registros do Node.js para ver a saída do registro do proxy. Se o proxy estiver configurado corretamente, você verá que a variável userId foi definida. Você também vai ver que o cabeçalho foi definido na saída 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 definido usando setVariable(), de quando foi criado por você em outro lugar ou quando foi criado por uma política. 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 os tipos de variáveis criados por políticas, consulte o tópico de referência da política específico.

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 se você tentar 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, string, 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 de conveniência 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 do 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. Excluir uma variável somente leitura é um erro. Para ver 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');