Send Docs Feedback

Note: Most user interface tasks can be performed in Edge Classic or the New Edge experience. For an overview, getting started topics, and release notes specific to the New Edge experience, see the docs.

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

Introduction

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

フロー変数は、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

apigeetool を使用してこの例のようなスタンドアロン Node.js アプリケーションを展開する方法の詳細については、「スタンドアロン Node.js アプリの展開」を参照してください。

アプリケーションを 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() メソッドによって例外がスローされます。読み取り専用の変数を確認するには、「変数リファレンス」を参照してください。 

パラメータ:

  • dhttpRequest: 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');
    

Help or comments?