アンチパターン: ストリーミングが有効な場合にリクエスト / レスポンス ペイロードにアクセスする

Edge のデフォルトの動作では、HTTP リクエスト / レスポンスのペイロードは、API プロキシ内の各ポリシーによって処理される前に、いったんメモリ内バッファに保存されます。

ストリーミングを有効にすると、リクエストとレスポンスのペイロードは変更されることなく、クライアント アプリ(レスポンスの場合)やターゲット エンドポイント(リクエストの場合)にストリーミングされます。アプリケーションが大きなペイロードの受け渡しをする場合や、長時間にわたってチャンク形式でデータを返すアプリケーションがある場合は、ストリーミング機能は特に便利です。

アンチパターン

ストリーミングを有効にした状態でリクエスト / レスポンス ペイロードにアクセスすると、Edge がデフォルトのバッファリング モードにリセットされます。

図 1: ストリーミングを有効にした状態でリクエスト / レスポンス ペイロードにアクセスする

上図では、リクエスト ペイロードから変数を抽出し、JSONToXML ポリシーを使用して、JSON レスポンス ペイロードを XML に変換しようとしています。この結果、Edge のストリーミングが無効になります。

影響

  • ストリーミングが無効になると、データ処理のレイテンシが増大する可能性があります。
  • Message Processor でヒープメモリの使用率が上昇するか、OutOfMemory エラーが発生する可能性があります。メモリ内バッファの使用が原因であり、特にリクエスト / レスポンス ペイロードが大きな場合は、このような状況に陥りやすくなります。

ベスト プラクティス

  • ストリーミングを有効にしている場合は、リクエスト / レスポンス ペイロードにアクセスしないでください。

関連情報