JavaScript オブジェクト モデル

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントを表示する。

このトピックでは、Apigee JavaScript オブジェクト モデルについて説明します。JavaScript ポリシーを使用してカスタム JavaScript を API プロキシに追加する場合は、このモデルを理解しておく必要があります。

JavaScript オブジェクト モデルについて

JavaScript オブジェクト モデルは、Apigee プロキシフロー内で実行される JavaScript コードで使用可能な関連プロパティを持つオブジェクトを定義します。JavaScript ポリシーを使用して、このカスタムコードを API プロキシフローに追加します。

このモデルで定義されるオブジェクトのスコープは、API プロキシフロー内です。つまり、特定のオブジェクトとプロパティはフロー内の特定の箇所でのみ使用できます。JavaScript が実行されると、実行用のスコープが作成されます。このスコープでは、次のオブジェクト参照が作成されます。

  • context: メッセージ コンテキストへのアクセスを提供するオブジェクト
  • request: リクエスト オブジェクトへのアクセスを許可する簡略リファレンス
  • response: レスポンス オブジェクトへのアクセスを許可する簡略リファレンス
  • crypto: さまざまなハッシュ関数を提供する
  • print: 出力を返す関数
  • properties: ポリシーの構成プロパティへの読み取りアクセスを許可する

context オブジェクト

context オブジェクトのスコープはグローバルです。これは、API プロキシフロー内の任意の場所で使用できます。このオブジェクトには、proxyRequestproxyResponsetargetRequesttargetResponse の 4 つの子オブジェクトがあります。これらの子オブジェクトのスコープは、環境のリクエストとレスポンスです。つまり、プロキシのリクエストとレスポンス、またはターゲットのリクエストとレスポンスが、スコープになります。たとえば、JavaScript ポリシーがフローのプロキシ エンドポイントの部分で実行される場合、context.proxyRequest オブジェクトと context.proxyResponse オブジェクトはスコープに含まれます。JavaScript がターゲット フローで実行される場合、context.targetRequest オブジェクトと context.targetResponse オブジェクトはスコープに含まれます。

context オブジェクトには、プロパティとメソッドも含まれます。詳しい内容は、このトピックで説明します。たとえば、次の JavaScript コードの例では、context.flow プロパティを使用して、context に対して get/setVariable() メソッドを呼び出します。

if (context.flow=="PROXY_REQ_FLOW") {
     var username = context.getVariable("request.formparam.user");
     context.setVariable("USER.name", username);
}

これらのメソッドでは、フロー変数と直接やり取りします。context.flow プロパティ値は現在のフローのスコープです。プロキシ リクエスト フローでは、この値は定数 PROXY_REQ_FLOW に設定されます。ターゲット レスポンス フローでは、TARGET_RESP_FLOW に設定されます。この定数は、スコープ固有のコードを実行する場合に便利です。getter を使用すると、フロー変数が取得できます。また、setter を使用すると、フロー変数を設定できます。これらの変数は、プロキシフローで提供され、他のポリシーで消費できます。

詳細と例については、コンテキスト オブジェクトのリファレンスをご覧ください。

crypto オブジェクト

crypto オブジェクトでは、JavaScript オブジェクト モデルに基本的な高パフォーマンスの暗号サポートが追加されます。詳細と例については、crypto オブジェクトのリファレンスをご覧ください。

request オブジェクトと response オブジェクト

request オブジェクトと response オブジェクトは、環境のリクエストとレスポンス(プロキシのリクエストとレスポンス、またはターゲットのリクエストとレスポンスのいずれか)に関する簡略リファレンスです。これらの変数が参照するオブジェクトは、JavaScript ポリシーが実行されるコンテキストによって異なります。JavaScript がプロキシ エンドポイントのフローで実行されている場合、request 変数と response 変数は context.proxyRequestcontext.proxyResponse を参照します。JavaScript がターゲット フローで実行される場合、これらの変数は context.targetRequestcontext.targetResponse を参照します。

JavaScript オブジェクト モデルの print() 関数を使用すると、デバッグ情報を Apigee デバッグツールに出力できます。JavaScript print() ステートメントを使用してデバッグするをご覧ください。

properties オブジェクト

ポリシー構成で Properties 要素を使用している場合、JavaScript コードでは properties 変数を使用してこれらのプロパティの値にアクセスできます。

たとえば、JavaScript 構成に以下が含まれているとします。

<Javascript name='JS-1' >
  <Properties>
    <Property name="number">8675309</Property>
    <Property name="firstname">Jenny</Property>
  </Properties>
  <ResourceURL>jsc://my-code.js</ResourceURL>
</Javascript>

my-code.js では、次のようになります。

  print(properties.firstname);  // prints Jenny
  print(properties.number);  // 8675309

実際には、さまざまな環境やタイミング、あるいはなんらかの事情に基づいて実行される場合に、構成によりコードの動作が異なる場合があります。

たとえば、以下では「変数名」と JavaScript が情報を出力する形式を指定しています。

<Javascript name='JS-2' >
  <Properties>
    <Property name="output">my_output_variable</Property>
    <Property name="prettyPrint">true</Property>
  </Properties>
  <ResourceURL>jsc://emit-results.js</ResourceURL>
</Javascript>
emit-results.js では、コードは次のようになる可能性があります。
var result = { prop1: "something", prop2 : "something else" } ;
if (properties.prettyPrint == "true") {
  context.setVariable(properties.output, JSON.stringify(result, null, 2));
}
else {
  context.setVariable(properties.output, JSON.stringify(result));
}

crypto オブジェクトのリファレンス

crypto オブジェクトを使用すると、JavaScript で基本的な暗号ハッシュ関数を実行できます。

crypto オブジェクトのスコープはグローバルです。API プロキシフロー内の任意の場所で使用できます。Crypto では、次のハッシュ オブジェクトを使用できます。

  • SHA-1
  • SHA256
  • SHA512
  • MD5

SHA-1 オブジェクトの操作

SHA-1 オブジェクトを作成して更新できます。また、16 進数または base64 値に変換することもできます。

新しい SHA-1 オブジェクトを作成する

var _sha1 = crypto.getSHA1();

SHA-1 オブジェクトを更新する

構文

_sha1.update(value);

パラメータ

  • value -(文字列)任意の文字列値。

SHA-1 オブジェクトを更新する

_sha1.update("salt_value");

_sha1.update("some text");

SHA-1 オブジェクトを 16 進文字列として返す

var _hashed_token = _sha1.digest();

SHA-1 オブジェクトを base64 文字列として返す

var _hashed_token = _sha1.digest64();

SHA-256 オブジェクトの操作

SHA-256 オブジェクトを作成して更新できます。また、16 進数や base64 値に変換することもできます。

新しい SHA-256 オブジェクトを作成する

var _sha256 = crypto.getSHA256();

SHA-256 オブジェクトを更新する

構文

_sha256.update(value);

パラメータ

  • value -(文字列)任意の文字列値。

SHA-256 オブジェクトを更新する

_sha256.update("salt_value");

_sha256.update("some text");

SHA-256 オブジェクトを 16 進文字列として返す

var _hashed_token = _sha256.digest();

SHA-256 オブジェクトを base64 文字列として返す

var _hashed_token = _sha256.digest64();

SHA-512 オブジェクトの操作

SHA-512 オブジェクトを作成して更新できます。また、16 進数または base64 値に変換することもできます。

新しい SHA-512 オブジェクトを作成する

var _sha512 = crypto.getSHA512();

SHA-512 オブジェクトを更新する

構文

_sha512.update(value);

パラメータ

  • value -(文字列)任意の文字列値。

SHA-512 オブジェクトを更新する

_sha512.update("salt_value");

_sha512.update("some text");

SHA-512 オブジェクトを 16 進文字列として返す

var _hashed_token = _sha512.digest();

SHA-512 オブジェクトを base64 文字列として返す

var _hashed_token = _sha512.digest64();

MD5 オブジェクトの操作

MD5 オブジェクトを作成して更新できます。また、16 進数または base64 値に変換することもできます。

新しい MD5 オブジェクトを作成する

var _md5 = crypto.getMD5();

MD5 オブジェクトを更新する

構文

_md5.update(value);

パラメータ

  • value -(文字列)任意の文字列値。

MD5 オブジェクトを更新する

_md5.update("salt_value");

_md5.update("some text");

MD5 オブジェクトを 16 進の文字列として返す

var _hashed_token = _md5.digest();

MD5 オブジェクトを base64 文字列として返す

var _hashed_token = _md5.digest64();

crypto での日付 / 時刻のサポート

crypto オブジェクトは、日付 / 時刻のフォーマット パターンをサポートしています。

crypto.dateFormat()

日付を文字列形式で返します。

構文

crypto.dateFormat(format, [timezone], [time])

パラメータ

  • format -(文字列)このパラメータの基礎となる実装は java.text.SimpleDateFormat です。例: 'YYYY-MM-DD HH:mm:ss.SSS'
  • timezone - (文字列、省略可)このパラメータの基板となる実装は java.util.TimeZone です。このパラメータは sameDefault の UTC です。
  • time -(数値、省略可)書式設定する Unix タイムスタンプ値。デフォルトは、現在の時刻です。

現在の時刻をミリ秒単位まで取得するには、次のように記述します。

var _now = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS');

太平洋標準時の現在時刻を取得するには、次のように記述します。

var _pst = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST');

現在から 10 秒の値を取得するには、次のように記述します。

var _timeNow = Number(context.getVariable('system.timestamp'));
var tenSeconds = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);

その他の例。java.text.SimpleDateFormat のドキュメントもご覧ください。

var _pst = crypto.dateFormat('M');
var _pst = crypto.dateFormat('EEE, d MMM yyyy HH:mm:ss Z');
var _pst = crypto.dateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

getHash() を使用して、サポートされているハッシュ オブジェクトを取得する

var _hash1 = crypto.getHash('MD5');

var _hash2 = crypto.getHash('SHA-1');

var _hash3 = crypto.getHash('SHA-256');

var _hash4 = crypto.getHash('SHA-512');

crypto を使用したサンプル

try {
    // get values to use with hash functions
    var salt = context.getVariable("salt") || 'SomeHardCodedSalt';
    var host = context.getVariable("request.header.Host");
    var unhashedToken = "";

    var _timeNow = Number(context.getVariable('system.timestamp'));
    var now = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST', _timeNow);
    unhashed_token = "|" + now + "|" + host

    // generate a hash with the unhashedToken:
    var sha512 = crypto.getSHA512();
    sha512.update(salt);
    sha512.update(unhashedToken);

    // convert to base64
    var base64Token = sha512.digest64();

    // set headers
    context.setVariable("request.header.now", now);
    context.setVariable("request.header.token", base64Token);

} catch(e) {
    throw 'Error in Javascript';
}

context オブジェクトのリファレンス

context オブジェクトは、API プロキシによって実行されるリクエスト / レスポンス トランザクションごとに作成されます。context オブジェクトは、各トランザクションに関連する変数の取得、設定、削除のためのメソッドを公開します。

これらの変数は、トランザクションに固有のプロパティを定義します。context で使用できる変数の例としては、その日の時刻、リクエスト側のクライアントのロケール、リクエスト側のクライアントのユーザー エージェント、ターゲット・サービスの URL があります。そのため、context は、これらのプロパティに依存してカスタム動作を実行するロジックを構築する場合に便利です。

フロー変数のリファレンスExtractVariables ポリシーをご覧ください。

context オブジェクトの概要

次のテーブルに、context オブジェクトとその子オブジェクトの内容、およびそれらにバインドされるプロパティの一覧を示します。

名前 説明 プロパティ
context メッセージ処理パイプラインのコンテキストと、ProxyEndpoint と TargetEndpoint が実行するリクエスト / レスポンス フローのラッパー。 flow、session
context.proxyRequest ProxyEndpoint へのインバウンド リクエスト メッセージ(リクエスト側のアプリから API プロキシへのメッセージ)を表すオブジェクト。 headers、query parameters、method、body、url
context.targetRequest TargetEndpoint からのアウトバウンド リクエスト メッセージ(API プロキシからバックエンド サービスへのメッセージ)を表すオブジェクト。 headers、query parameters、method、body、url
context.targetResponse インバウンド ターゲット レスポンス メッセージ(バックエンド サービスから API プロキシへのメッセージ)を表すオブジェクト。 headers、content、status
context.proxyResponse アウトバウンド プロキシ レスポンス メッセージ(API プロキシからリクエスト側のアプリへのメッセージ)を表すオブジェクト。 headers、content、status
context.flow 現在のフローの名前。 context.flow をご覧ください。
context.session 同じコンテキストで実行している 2 つの異なるステップ間でオブジェクトを渡すために使用できる名前と値のペアのマップ。例: context.session['key'] = 123 このオブジェクトを使用するタイミングと使用しないタイミングについて詳しくは、context.session['hello'] = {} と context.setVariable("hello", {}) の違いをご覧ください。

context オブジェクトのメソッド

context.getVariable()

事前定義変数またはカスタム変数の値を取得します。

構文

context.getVariable("variable-name");

現在の年の値を取得するには、次のように記述します。

var year = context.getVariable('system.time.year');

context.setVariable()

カスタム変数または書き込み可能な事前定義された変数の値を設定します。

構文

context.setVariable("variable-name", value);

変数を設定する一般的なケースは、API プロキシによってターゲット URL が動的に書き込まれる必要がある場合です。以下の JavaScript では、USER.name という変数の値を取得し、その値をクエリ パラメータとして URL http://mocktarget.apigee.net?user= に追加して、事前定義された target.url をその値に設定します。

context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));

context.removeVariable()

コンテキストから変数を削除します。

構文

context.removeVariable('variable-name');

context オブジェクトのプロパティ

context.flow

flow プロパティは、現在の API プロキシフローを識別する文字列です。このプロパティは、JavaScript が追加されたフローを表す場合に使用されます。サポートされている値は次のとおりです。

  • PROXY_REQ_FLOW
  • PROXY_RESP_FLOW
  • TARGET_REQ_FLOW
  • TARGET_RESP_FLOW

フロー名には、PreFlow と PostFlow の他に、ProxyEndpoint(s) または TargetEndpoint(s) で定義された条件付きフローが含まれます。

共通の JavaScript が複数のフローで実行され、実行されるフローによって動作が変わる場合、このオプションのプロパティは便利です。複数の API プロキシで再利用する JavaScript モジュールに Flow プロパティを使用します。このコードは、ロジックの実行前に現在のフローを確認するために使用されます。

targetRequest フローでのみ HTTP ヘッダーを設定するには、次のように記述します。

if (context.flow=="TARGET_REQ_FLOW") {
     context.targetRequest.headers['TARGET-HEADER-X']='foo';
}

proxyResponse フローでのみコンテンツを設定するには、次のように記述します。

if (context.flow=="PROXY_RESP_FLOW") {
     context.proxyResponse.content='bar';
}

context.session

同じメッセージ コンテキストで実行する 2 つのポリシー間でオブジェクトを渡すために使用できる名前と値のペアのマップ。

セッションに値を設定するには、次のように記述します。

context.session['key']  = 123;

セッションから値を取得するには、次のように記述します。

var value = context.session['key']; // 123

context オブジェクトの子

以下に示すように、完全な API プロキシフローは 4 つの異なるフェーズから構成されています。各フェーズには、context オブジェクトの子になるメッセージ オブジェクトが関連付けられています。

  • context.proxyRequest: リクエスト側のクライアントから受信したインバウンド リクエスト メッセージ。
  • context.targetRequest: バックエンド サービスに送信されたアウトバウンド リクエスト メッセージ。
  • context.proxyResponse: リクエスト側のクライアントに返されるアウトバウンド レスポンス メッセージ。
  • context.targetResponse: バックエンド サービスから受信したインバウンド リクエスト メッセージ。

プロキシ エンドポイントとターゲット エンドポイントを通過するリクエストとレスポンスの図。

以下のセクションでは、これらのオブジェクトのメソッドとプロパティについて説明します。

context.*Request の子オブジェクト

API プロキシで実行される HTTP トランザクションのそれぞれには、2 つのリクエスト メッセージ オブジェクトが作成されます。1 つはインバウンド用(クライアントからのリクエスト)で、もう 1 つはアウトバウンド用(API プロキシによって生成され、バックエンド ターゲットに送信されるリクエスト)です。

context オブジェクトには、これらのリクエスト メッセージを表す子オブジェクト(context.proxyRequestcontext.targetRequest)があります。これらのオブジェクトを使用すると、JavaScript コードの実行時にスコープ内にあるリクエスト フロー内のプロパティにアクセスできます。

context.*Request の子オブジェクトのプロパティ

プロパティ名 説明
url

url プロパティは、読み取り / 書き込みのコンビニエンス プロパティです。targetRequest のスキーム、ホスト、ポート、パス、クエリ パラメータが組み合わされます。

リクエストの完全な URL は、次のプロパティから構成されます。

  • protocol: URL のプロトコル(HTTP、HTTPS など)
  • port: ポート(:80、:443 など)
  • host: URL のホスト(www.example.com など)
  • path: URI のパス(/v1/mocktarget など)

url を取得すると、URL が次の形式で返されます。

protocol://host:port/path?queryParams

例:

context.targetRequest.url = 'http://www.example.com/path?q1=1'
context.targetRequest.protocol ='https';
headers

String => List のマッピングとしての HTTP リクエスト ヘッダー

例:

次の HTTP リクエストに対して、

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
次のように JavaScript を記述した場合、
context.proxyRequest.headers['Content-Type'];
context.proxyRequest.headers['Authorization'];

次の値が返されます。

application/json
Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
queryParams

String => List のマッピングとしてのリクエスト メッセージのクエリ パラメータ。

例:

"?city=PaloAlto&city=NewYork"

これは次のようにアクセス可能です。

context.proxyRequest.queryParams['city'];  // == 'PaloAlto'
context.proxyRequest.queryParams['city'][0]     // == 'PaloAlto'
context.proxyRequest.queryParams['city'][1];    // == 'NewYork'
context.proxyRequest.queryParams['city'].length(); // == 2
method

リクエストに関連する HTTP 動詞(GET、POST、PUT、DELETE. PATCH など)

例:

次のリクエストに対して、

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z

次のように JavaScript を記述した場合、

context.proxyRequest.method;

次の値が返されます。

POST
body

HTTP リクエストのメッセージの本文(ペイロード)。

リクエスト本文には次のメンバーがあります。

  • context.targetRequest.body.asXML;
  • context.targetRequest.body.asJSON;
  • context.targetRequest.body.asForm;

例:

次のような XML 本文において、

<customer number='1'>
<name>Fred<name/>
<customer/>

XML オブジェクトの要素にアクセスするには、次のようにします。

var name = context.targetRequest.body.asXML.name;

XML 属性にアクセスするには、@ 表記を使用します。

var number = context.targetRequest.body.asXML.@number;

JSON リクエスト本文の場合:

{
"a":  1 ,
"b" : "2"
}
var a = context.proxyRequest.body.asJSON.a;    // == 1
var b = context.proxyRequest.body.asJSON.b;    // == 2

フォーム パラメータを読み込むには、次のように記述します。

"vehicle=Car&vehicle=Truck"
v0 = context.proxyRequest.body.asForm['vehicle'][0];
v1 = context.proxyRequest.body.asForm['vehicle'][1];

context.*Response の子オブジェクト

API プロキシで実行される HTTP トランザクションにはそれぞれ 2 つのリクエスト メッセージ オブジェクトが作成されます。1 つはインバウンド用(バックエンド サービスからのリクエスト)で、もう 1 つはアウトバウンド用(クライアントに返されるレスポンス)です。

context オブジェクトには、これらのレスポンス メッセージを表す子オブジェクト(context.proxyResponsecontext.targetResponse)があります。これらのオブジェクトを使用すると、JavaScript コードの実行時にスコープ内にあるレスポンス フロー内のプロパティにアクセスできます。

context.*Response オブジェクトのプロパティ

プロパティ名 説明
headers

String => List のマッピングとしてのレスポンス メッセージの HTTP ヘッダー。

例:

var cookie = context.targetResponse.headers['Set-Cookie'];
status

ステータス コードとステータス メッセージ。ステータス コードとステータス メッセージは両方ともプロパティとして使用できます。

例:

var status = context.targetResponse.status.code;   // 200
var msg = context.targetResponse.status.message;   // "OK"
content

レスポンス メッセージの HTTP 本文(ペイロード コンテンツ)。

レスポンス コンテンツには次のメンバーがあります。

context.targetResponse.content.asXML;
context.targetResponse.content.asJSON;

.asXML 表記の使用

.asXML 表記を使用すると、XML ドキュメントを簡単に確認できます。このセクションでは、この表記の使用方法と、request.contentcontext.proxyRequest.content との違いについて説明します。

次に例を示します。

request.content.asXML

または

context.proxyRequest.content.asXML

*.content*.content.asXML のどちらの形式も、文字列のコンテキストで使用可能です。JavaScript では、これらの形式は強制的に文字列に変換されます。前者の場合(*.content)、文字列にはすべての宣言と XML コメントが含まれます。後者の場合(*.content.asXML)、結果の文字列値から宣言とコメントが削除されます。

msg.content:

<?xml version="1.0" encoding="UTF-8"?>
<yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US">
   <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com"
   </yahoo:description>
</yahoo:error>
<!-- mg023.mail.gq1.yahoo.com uncompressed/chunked Sat Dec 14 01:23:35 UTC 2013 -->

msg.content.asXML:

<?xml version="1.0" encoding="UTF-8"?>
<yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US">
   <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com"
   </yahoo:description>
</yahoo:error>

さらに、要素と属性の名前を指定することで、.asXML フォームを使用して XML 階層を走査できます。別の構文を使用して、階層を走査することはできません。

JavaScript の print() ステートメントを使用してデバッグする

JavaScript ポリシーを使用して、カスタム JavaScript コードを実行する場合は、print() 関数を使用してデバッグツールにデバッグ情報を出力できます。この関数は、JavaScript オブジェクト モデルで直接使用できます。次に例を示します。

if (context.flow=="PROXY_REQ_FLOW") {
     print("In proxy request flow");
     var username = context.getVariable("request.queryparam.user");
     print("Got query param: " + username);
     context.setVariable("USER.name", username);
     print("Set query param: " + context.getVariable("USER.name"));
}


if (context.flow=="TARGET_REQ_FLOW") {
     print("In target request flow");
     var username = context.getVariable("USER.name");
     var url = "http://mocktarget.apigee.net/user?"
     context.setVariable("target.url", url + "user=" + username);
     print("Callout to URL: ", context.getVariable("target.url"));
}

出力を表示するには、デバッグ ウィンドウの下部にある [Output from all transactions] を選択します。stepExecution-stdout というデバッグ プロパティで出力を確認することもできます。

httpClient での JavaScript コールアウトの作成

httpClient を使用して、API プロキシフローで実行されるカスタム JavaScript コード内から、任意の URL に対して複数の並列な非同期の HTTP リクエストを行います。httpClient オブジェクトは、Apigee JavaScript オブジェクト モデルで公開されます。

httpClient について

httpClient オブジェクトは、JavaScript オブジェクト モデルを介して Apigee で実行されるカスタム JavaScript コードに公開されます。カスタム JavaScript を API プロキシに接続するには、JavaScript ポリシーを使用します。ポリシーが実行されると、カスタム JavaScript コードが実行されます。

httpClient オブジェクトは、複合サービスやマッシュアップを開発するのに役立ちます。たとえば、複数のバックエンド呼び出しを 1 つの API メソッドに統合できます。

基本的な使用パターンは次のとおりです。Request オブジェクトをインスタンス化して(たとえば、呼び出し対象のバックエンド サービスの)URL に割り当て、そのリクエスト オブジェクトを使用して httpClient.send を呼び出します。

var myRequest = new Request();
myRequest.url = "http://www.example.com";
var exchangeObj = httpClient.send(myRequest);

httpClient リファレンス

HTTP クライアントは、get()send() という 2 つのメソッドを公開します。

httpClient.get()

単純な HTTP GET リクエストに便利なメソッドで、HTTP ヘッダーのサポートはありません。

用途

var exchangeObj = httpClient.get(url);

戻り値

このメソッドは、exchange オブジェクトを返します。このオブジェクトにプロパティはありません。次のメソッドを公開します。

  • isError(): (ブール値)httpClient がサーバーに接続できなかった場合に true が返されます。接続が完了して有効なレスポンス コードが返されたため、HTTP ステータス コード 4xx5xxisError() false になります。isError()true を返す場合、getResponse() の呼び出しにより JavaScript の undefined が返されます。
  • isSuccess(): (ブール値)送信が完了して成功した場合に、true が返されます。
  • isComplete(): (ブール値)リクエストが完了すると true が返されます。
  • waitForComplete(): リクエストが完了する(成功するか、エラーになる)まで、スレッドを一時停止します。
  • getResponse(): (オブジェクト)httpClient.send() が完了して成功すると、レスポンス オブジェクトが返されます。返されるオブジェクトには、context.proxyResponse オブジェクトと同じメソッドとプロパティが含まれます。コンテキスト オブジェクトの概要をご覧ください。
  • getError(): (文字列)httpClient.send() の呼び出しでエラーが発生した場合、エラー メッセージが文字列として返されます。

HTTP リクエストのプロパティを含む完全な構成の Request オブジェクトを送信します。非ブロック コールバックを使用してレスポンスを処理します。

// Add the required the headers for making a specific API request
var headers = {'X-SOME-HEADER' : 'some value' };
// Make a GET API request along with headers
var myRequest = new Request("http://www.example.com","GET",headers);

// Define the callback function and process the response from the GET API request
function onComplete(response,error) {
 // Check if the HTTP request was successful
    if (response) {
      context.setVariable('example.status', response.status);
     } else {
      context.setVariable('example.error', 'Woops: ' + error);
     }
}

// Specify the callback Function as an argument
httpClient.get(myRequest, onComplete);

JavaScript ポリシーの使用

JavaScript ポリシーを使用して、カスタム JavaScript コードをプロキシフローに追加します。 JavaScript ポリシーをご覧ください。

関連トピック