Accéder aux variables de flux dans Node.js

Vous consultez la documentation d'Apigee Edge.
Accédez à la documentation sur Apigee X.
info

Introduction

Utilisez le module apigee-access pour accéder aux variables de flux Apigee Edge dans une application Node.js. Le module comporte des méthodes permettant d'obtenir, de définir et de supprimer des variables. Elle comporte également une méthode pratique permettant de définir une variable entière.

Les variables de flux existent dans le contexte d'un flux de proxy d'API. Certaines variables sont « intégrées » à Edge. D'autres sont créées lorsque les règles sont exécutées, et vous pouvez créer vos propres variables. Les variables de flux sont généralement utilisées pour transmettre des données d'une règle à une autre et pour définir des conditions dans des flux conditionnels. Pour en savoir plus sur les variables de flux, consultez la section Variables et conditions de flux.

Pour obtenir une présentation du module apigee-access et de ses autres fonctionnalités, consultez Utiliser le module apigee-access.

Exemple fonctionnel

Imaginons qu'une règle Edge exécutée sur le chemin du flux de requête définisse une variable appelée AuthenticatedUserId. Le code suivant accède à cette variable et l'imprime dans un journal. De plus, ce code définit une variable. Vous pouvez ensuite accéder à cette variable à partir d'une règle, comme illustré ci-dessous.

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/');

Vous pouvez copier ce code dans un fichier JavaScript, le déployer sur Edge et l'essayer. Appelez le fichier server.js. Pour le déployer, utilisez:

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

Après avoir déployé l'application sur Edge, ajoutez une règle AssignMessage avec la configuration suivante au flux de requêtes 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>

Ensuite, associez une autre règle assignMessage au flux préliminaire de réponse 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>

Vous pouvez appeler le proxy comme suit:

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

Accédez maintenant à la page du proxy d'accès dans l'UI de gestion et affichez la vue Développer. Cliquez sur Journaux Node.js pour afficher la sortie du journal du proxy. Si le proxy est correctement configuré, vous verrez que la variable userId a été définie. Vous pouvez également voir que l'en-tête a été défini dans la sortie cURL de votre fenêtre de 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éthodes


getVariable

var result = getVariable(httpRequest, name);

Récupère une variable nommée.

Paramètres :

  • httpRequest: objet de requête provenant du module HTTP.
  • name: (chaîne) nom de la variable à récupérer.

Renvoie :

Chaîne ou nombre, en fonction du type défini à l'aide de setVariable(), lorsque vous l'avez créé ailleurs ou lorsqu'une règle l'a créé. Si vous accédez à l'une des variables Edge prêtes à l'emploi, vous trouverez une liste des types dans la documentation de référence sur les variables. Pour les types de variables créés par des règles, reportez-vous à la rubrique de référence de la règle concernée.

Exemples :

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);

Définit une variable. Certaines variables sont en lecture seule, et la méthode setVariable() génère une exception si vous essayez d'en définir une. Pour déterminer quelles variables sont en lecture seule, consultez la documentation de référence sur les variables.

Paramètres :

  • httpRequest: objet de requête provenant du module HTTP.
  • name: (chaîne) nom de la variable à récupérer.
  • value: peut être un nombre, une chaîne, un booléen, une valeur nulle ou une valeur non définie.

Exemple :

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);

La méthode setIntVariable() est une méthode pratique qui commence par convertir le paramètre de valeur en entier, puis le définit.

Paramètres :

  • httpRequest: objet de requête provenant du module http.
  • name: (chaîne) Nom de la variable à définir.
  • value: le paramètre "value" doit être une chaîne ou un nombre.

Exemple :

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

Supprime une variable nommée. Il s'agit d'une erreur de supprimer une variable en lecture seule. Pour obtenir la liste complète des variables en lecture seule, consultez la documentation de référence sur les variables.

deleteVariable(httpRequest, name);

Paramètres :

  • httpRequest: objet de requête provenant du module http.
  • name: (chaîne) nom de la variable à supprimer.

Exemple :

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