Accéder aux variables de flux dans Node.js

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

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 pour obtenir, définir et supprimer des variables. Elle propose également une méthode pratique permettant de définir une variable entière.

Les variables de flux existent dans le contexte d'un flux proxy d'API. Certaines variables sont "intégrées" à Edge. D'autres sont créées lorsque les stratégies s'exécutent. 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 plus d'informations 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 la section Utiliser le module "apigee-access".

Exemple fonctionnel

Imaginez qu'une règle Edge exécutée sur le chemin de flux de requêtes 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 stratégie, 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, exécutez la commande suivante:

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 stratégie AffectMessage 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 stratégieAssignMessage 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

À présent, accédez à la page du proxy d'accès dans l'interface utilisateur de gestion et affichez la vue Develop (Développer). Cliquez sur Journaux Node.js pour afficher la sortie du journal du proxy. Si le proxy est correctement configuré, vous constaterez 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 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, selon le type défini à l'aide de setVariable(), la date de création par vous ailleurs ou la date de création par une règle. 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, reportez-vous à la rubrique de référence des règles en question.

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: nombre, chaîne, booléen, valeur nulle ou non défini.

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 convertit d'abord 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 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 est 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');