Edge では、ある API プロキシから別の API プロキシを呼び出すことができます。他の API プロキシでも使用できる再利用可能なコードを含む API プロキシの場合は、この機能が特に便利です。
アンチパターン
ターゲット エンドポイントで HTTPTargetConnection を使用するか、またはカスタム JavaScript コードを使用して、ある API プロキシから別の API プロキシを呼び出すと、追加的なネットワーク ホップが生じます。
HTTPTargetConnection を使用してプロキシ 1 からプロキシ 2 を呼び出す
次のコードは、HTTPTargetConnection を使用してプロキシ 1 からプロキシ 2 を呼び出す例を示します。
<!-- /antipatterns/examples/2-1.xml --> <HTTPTargetConnection> <URL>http://myorg-test.apigee.net/proxy2</URL> </HTTPTargetConnection>
JavaScript コードを使用してプロキシ 1 からプロキシ 2 を呼び出す
次のコードは、JavaScript を使用してプロキシ 1 からプロキシ 2 を呼び出す例を示します。
<!-- /antipatterns/examples/2-2.xml --> var response = httpClient.send('http://myorg-test.apigee.net/proxy2); response.waitForComplete();
コードのフロー
この方法に本質的なデメリットがある理由を理解するには、次の図に示すように、リクエストが送信されるルートを理解する必要があります。
図に示すように、リクエストはいくつもの分散コンポーネントを経由し、その中には Router や Message Processor(MP)も含まれます。
上記のコードサンプルでは、プロキシ 1 からプロキシ 2 を呼び出す場合、ランタイム時にリクエストが従来のルート(Router から MP へ)を経由することになります。これにより、クライアントから API を呼び出す場合と同様に、複数のネットワーク ホップが生じてレイテンシの増大につながります。プロキシ 1 のリクエストが MP にすでに「到達した」ことを考えれば、これらのホップは不要です。
影響
ある API プロキシから別の API プロキシを呼び出すと、不要なネットワーク ホップが生じ、リクエストが 1 つの Message Processor から別の Message Processor に渡されることになります。
ベスト プラクティス
- ある API プロキシから別の API プロキシを呼び出す場合に、プロキシ チェーン機能を使用します。プロキシ チェーンはローカル接続を使用してターゲット エンドポイント(他方の API プロキシ)を参照するので、より効率的です。
次のコードは、エンドポイントの定義で LocalTargetConnection を使用するプロキシ チェーンの例を示しています。
<!-- /antipatterns/examples/2-3.xml --> <LocalTargetConnection> <APIProxy>proxy2</APIProxy> <ProxyEndpoint>default</ProxyEndpoint> </LocalTargetConnection>
呼び出された API プロキシは、同じ Message Processor 内で実行されます。この結果、次の図に示すように、ネットワーク ホップの発生を回避できます。