はじめに
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');