リクエストとレスポンスのストリーミング

このトピックで説明する内容

このトピックでは、以下のことを説明します。

  • Apigee Edge でのリクエストやレスポンスのストリーミング
  • リクエストやレスポンスのストリーミングを使用すべき状況
  • リクエストやレスポンスのストリーミングを有効にする方法

リクエストやレスポンスのストリーミングとは

デフォルトでは HTTP ストリーミングは無効です。HTTP リクエストおよびレスポンスのペイロードはメモリ内のバッファに書き込まれてから、API プロキシ パイプラインによって処理されます。この動作は、ストリーミングを有効にすることで変更できます。ストリーミングを有効にすると、リクエストとレスポンスのペイロードが変更なしにクライアント アプリ(レスポンスの場合)やターゲット エンドポイント(リクエストの場合)にストリーミングされます。

ストリーミングを有効にすべき状況

API プロキシが非常に大きなリクエストやレスポンスを処理する場合は(サイズの上限については、後述のストリーミングについて他に知っておくべきことを参照)、ストリーミングを有効にすることを検討してください。

ストリーミングについて他に知っておくべきこと

メッセージ ペイロードのサイズは、ストリーミングが有効になっていても Edge Cloud と Private Cloud で 10 MB に制限されています。ストリーミングされていないリクエストとレスポンスでは、このサイズを超えると protocol.http.TooBigBody エラーが発生します。

Edge for Private Cloud のデプロイでは、ストリーミングされていないリクエスト / レスポンスのサイズ制限を変更できます。本番環境にデプロイする前に変更内容を必ずテストしてください。

  • Edge for Private Cloud リリース 4.16.01 以前の場合:

    すべての Message Processor で、http.properties ファイルを編集して HTTPResponse.body.buffer.limit パラメータの制限を増やし、Message Processor を再起動します。
  • Edge for Private Cloud リリース 4.16.01 以降の場合:
    1. ファイル /<inst_root>/apigee/customer/application/message-processor.properties を編集します。ファイルが存在しない場合は作成します。

    2. message-processor.propertiesconf_http_HTTPResponse.body.buffer.limit プロパティを設定します。例:
      conf_http_HTTPResponse.body.buffer.limit=5m

    3. Message Processor を再起動します。
      > /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart

    4. すべての Message Processor に対して繰り返し行います。

リクエストやレスポンスのストリーミングを有効にする方法

リクエストのストリーミングを有効にするには、プロキシ バンドルの ProxyEndpoint 定義と TargetEndpoint 定義に request.streaming.enabled プロパティを追加し、true に設定する必要があります。同様に、レスポンスのストリーミングを有効にするため、response.streaming.enabled プロパティを設定します。

プロキシの構成ファイルの場所は、プロキシの管理 UI の [Develop] ビューで確認できます。ローカルで開発している場合、定義ファイルは apiproxy/proxiesapiproxy/targets にあります。

このサンプルは、TargetEndpoint 定義でリクエストとレスポンス両方のストリーミングを有効にする方法を示しています。

<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="response.streaming.enabled">true</Property>
      <Property name="request.streaming.enabled">true</Property>
      <Property name="supports.http10">true</Property>
      <Property name="request.retain.headers">User-Agent,Referer,Accept-Language</Property>
      <Property name="retain.queryparams">apikey</Property>
    </Properties>
  </HTTPTargetConnection>
</TargetEndpoint>

こちらの例は、ProxyEndpoint 定義でリクエストとレスポンスのストリーミングを有効にする方法を示しています。

<ProxyEndpoint name="default">
  <HTTPProxyConnection>
    <BasePath>/v1/weather</BasePath>
    <Properties>
      <Property name="allow.http10">true</Property>
      <Property name="response.streaming.enabled">true</Property>
      <Property name="request.streaming.enabled">true</Property>
    </Properties>
  </HTTPProxyConnection>
</ProxyEndpoint>

エンドポイント定義の構成の詳細については、エンドポイント プロパティのリファレンスをご覧ください。

関連コードサンプル

GitHub にある API プロキシ サンプルは、簡単にダウンロードして使用できます。サンプルのダウンロードと使用の詳細については、サンプル API プロキシの使用をご覧ください。

ストリーミングを使用するサンプル プロキシには以下があります。

  • ストリーミング - HTTP ストリーミング用に構成された API プロキシのデモです。
  • Edge Callout: Signed URL Generator - 大容量ファイルをリクエスト、レスポンスでストリーミングしようとする代わりに、このファイルにアクセスする署名付き URL を生成するベスト プラクティスを紹介しています。