API Gateway で圧縮されたペイロードで API レスポンスを受信する - Amazon API Gateway

API Gateway で圧縮されたペイロードで API レスポンスを受信する

圧縮が有効な API を作成する場合、クライアントは Accept-Encoding ヘッダーをサポートされているコンテンツコーディングで指定することにより、圧縮されたレスポンスのペイロードを指定の形式で受信することを選択できます。

API Gateway は、次の条件が満たされた場合にのみレスポンスのペイロードを圧縮します。

  • 着信リクエストには、サポートされているコンテンツコーディングと形式の Accept-Encoding ヘッダーがあります。

    注記

    ヘッダーが設定されていない場合、デフォルト値は RFC 7231 で定義された * です。このような場合、API Gateway はペイロードを圧縮しません。一部のブラウザまたはクライアントでは、Accept-Encoding (Accept-Encoding:gzip, deflate, br など) が、圧縮が有効なリクエストに自動的に追加されます。これにより、API Gateway でペイロードの圧縮を有効にすることができます。サポートされている Accept-Encoding ヘッダー値の明示的な仕様がない場合、API Gateway はペイロードを圧縮しません。

  • minimumCompressionSize は、圧縮を有効にするために API で設定されています。

  • 統合レスポンスには Content-Encoding ヘッダーはありません。

  • 統合レスポンスのペイロードのサイズは、適用可能なマッピングテンプレートが適用されると、指定された minimumCompressionSize 値以上になります。

API Gateway はペイロードを圧縮する前に、統合レスポンス用に設定されたマッピングテンプレートを適用します。統合レスポンスに Content-Encoding ヘッダーが含まれている場合、API Gateway は、統合レスポンスのペイロードはすでに圧縮されているとみなし、圧縮処理がスキップされます。

たとえば、PetStore API の例と次のリクエストがあります。

GET /pets Host: {petstore-api-id}.execute-api.{region}.amazonaws.com Accept: application/json

バックエンドはリクエストに次のような圧縮されていない JSON ペイロードで応答します。

200 OK [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

この出力を圧縮されたペイロードとして受け取るために、API クライアントは次のようにリクエストを送信できます。

GET /pets Host: {petstore-api-id}.execute-api.{region}.amazonaws.com Accept-Encoding:gzip

クライアントは、Content-Encoding ヘッダーと次のような GZIP エンコードされたペイロードでレスポンスを受信します。

200 OK Content-Encoding:gzip ... ���RP� J�)JV �:P^IeA*������+(�L �X�YZ�ku0L0B7!9��C#�&����Y��a���^�X

レスポンスのペイロードが圧縮されると、圧縮されたデータサイズのみがデータ転送に対して課金されます。