Node.js でのフロー変数へのアクセス

概要

Node.js アプリケーションでは、apigee-access モジュールを使用して Apigee Edge のフロー変数にアクセスします。このモジュールには、変数の取得設定削除に使用するメソッドが用意されています。また、整数変数の設定に使用される便利なメソッドもあります。

フロー変数は、API プロキシフローのコンテキスト内に存在します。一部の変数は Edge の「組み込み」変数になっています。それ以外はポリシーの実行時に作成されます。独自の変数を作成することもできます。一般にフロー変数は、ポリシー間のデータの受け渡しや、条件フローでの条件の設定に使用されます。フロー変数の詳細については、フロー変数と条件をご覧ください。

apigee-access モジュールとこのモジュールのその他の機能については、apigee-access モジュールの使用をご覧ください。

使用例

リクエスト フローパスで実行されている Edge ポリシーで AuthenticatedUserId という変数が設定されるとします。以下のコードは、この変数にアクセスしてログに出力します。また、このコードでは変数の設定も行われます。それにより、以下に示すように、この変数にポリシーからアクセスできるようになります。

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

    

このコードは、JavaScript ファイルにコピーして Edge にデプロイすることで、試すことができます。ファイル server.js を呼び出します。このファイルをデプロイするには、以下のコマンドを使用します。

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

アプリケーションを Edge にデプロイした後に、以下のように構成された AssignMessage ポリシーを 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>
    

次に、別の AssignMessage ポリシーを 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>
    

プロキシは、以下のようにして呼び出すことができます。

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

次に、管理 UI のアクセス プロキシのページに移動して、[Develop] ビューを開きます。[Node.js Logs] をクリックして、プロキシからのログ出力を表示します。プロキシが適切に構成されていれば、userId 変数が設定されていることを確認できます。また、cURL 出力にヘッダーが設定されたこともデバイス ウィンドウで確認できます。

    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
    

メソッド


getVariable

var result = getVariable(httpRequest, name);

名前付き変数を取得します。

パラメータ:

  • httpRequest: http モジュールからのリクエスト オブジェクト。
  • name: (文字列)取得する変数の名前。

戻り値:

文字列または数値。別の場所で作成したときに setVariable() で設定された型、またはポリシーによって作成された型に応じて異なります。標準装備の Edge 変数にアクセスしようとしている場合、型の一覧については変数リファレンスを参照してください。ポリシーによって作成される変数型については、ポリシー リファレンスのトピックを参照してください。

例:

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

変数を設定します。一部の変数は読み取り専用であるため、そのような変数を設定しようとすると setVariable() メソッドによって例外がスローされます。読み取り専用の変数を確認するには、変数リファレンスをご覧ください。

パラメータ:

  • httpRequest: http モジュールからのリクエスト オブジェクト。
  • name: (文字列)取得する変数の名前。
  • value: 数値、文字列、ブール値、null、未定義のいずれかにできます。

例:

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

setIntVariable() は、value パラメータを強制的に整数値に変換してから設定する、便利なメソッドです。

パラメータ:

  • httpRequest: http モジュールからのリクエスト オブジェクト。
  • name: (文字列)設定する変数の名前。
  • value: 文字列または数値にする必要があります。

例:

    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

名前付き変数を削除します。読み取り専用変数を削除しようとすると、エラーになります。読み取り専用変数の全一覧については、変数リファレンスをご覧ください。

deleteVariable(httpRequest, name);

パラメータ:

  • httpRequest: http モジュールからのリクエスト オブジェクト。
  • name: (文字列)削除する変数の名前。

例:

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