アンチパターン: カスタムコードを使用して、またはターゲットとしてプロキシ内でプロキシを呼び出す

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

コードのフロー

この方法に本質的なデメリットがある理由を理解するには、次の図に示す、リクエストが送信されるルートを理解する必要があります。

図 1: コードのフロー

図に示すように、リクエストはいくつもの分散コンポーネント間を経由し、その中には Router や Message Processor(MP)も含まれます。

上記のコードサンプルでは、プロキシ 1 からプロキシ 2 を呼び出す場合、リクエストはランタイムに従来のルート(Router から MP へ)を経由することになります。これはクライアントから API を呼び出す場合と同様、複数のネットワーク ホップが生じ、レイテンシの増大につながります。プロキシ 1 のリクエストはすでに MP に到達していることを考えれば、これらのホップは不要です。

影響

ある API プロキシから別の API プロキシを呼び出すと、不要なネットワーク ホップが生じ、リクエストはある Message Processor から別の Message Processor に渡されることになります。

ベスト プラクティス

  • ある API プロキシから別の API プロキシを呼び出す場合に、プロキシ チェーン機能を使用します。プロキシ チェーンはローカル接続を使用してターゲット エンドポイント(他方の API プロキシ)を参照するため、より効率的です。

    次のコードは、エンドポイントの定義で LocalTargetConnection を使用するプロキシ チェーンの例を示します。

    <!-- /antipatterns/examples/2-3.xml -->
        <LocalTargetConnection>
          <APIProxy>proxy2</APIProxy>
          <ProxyEndpoint>default</ProxyEndpoint>
        </LocalTargetConnection>
        

    呼び出された API プロキシは、同一の Message Processor 内で実行されます。この結果、次の図に示すように、ネットワーク ホップの発生を回避できます。

    図 2: プロキシ チェーンのコードフロー

関連情報