Accéder aux variables de flux dans Node.js

Vous consultez la documentation Apigee Edge.
Accédez à la documentation 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. Il dispose également d'une méthode pratique pour 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 lors de l'exécution des règles, 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 de flux et conditions.

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

Exemple pratique

Imaginez qu'une règle Edge s'exécutant sur le chemin du flux de requêtes définit 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

Une fois l'application déployée 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 PreFlow 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'interface utilisateur de gestion et affichez la Développer vue. Cliquez sur Journaux Node.js pour afficher la sortie du journal de le proxy. Si le proxy est correctement configuré, vous verrez que la variable userId a été définie. Vous verrez également que l'en-tête a été défini dans la sortie cURL de la fenêtre de votre 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);

Obtient 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 :

Une chaîne ou un nombre, selon le 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 de types dans la documentation de référence sur les variables. Pour les types de variables créés par des règles, consultez la documentation de référence spécifique à la règle.

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 de définir l'une d'elles. 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, une valeur booléenne, 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 force d'abord le paramètre de valeur à un 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 de valeur 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. La suppression d'une variable en lecture seule génère une erreur. 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');