

# Amazon API Gateway に関する重要な注意点
<a name="api-gateway-known-issues"></a>

次のセクションでは、API Gateway の使用に影響する可能性がある注意点について詳しく説明します。

**Topics**
+ [Amazon API Gateway の HTTP API に関する重要な注意点](#api-gateway-known-issues-http-apis)
+ [Amazon API Gateway の HTTP および WebSocket API に関する重要な注意点](#api-gateway-known-issues-http-and-websocket-apis)
+ [Amazon API Gateway の REST および WebSocket API に関する重要な注意点](#api-gateway-known-issues-rest-and-websocket-apis)
+ [Amazon API Gateway の WebSocket API に関する重要な注意点](#api-gateway-known-issues-websocket-apis)
+ [Amazon API Gateway の REST API に関する重要な注意点](#api-gateway-known-issues-rest-apis)

## Amazon API Gateway の HTTP API に関する重要な注意点
<a name="api-gateway-known-issues-http-apis"></a>
+ HTTP API は受信 `X-Forwarded-*` ヘッダーを標準 `Forwarded` ヘッダーに変換し、出力 IP、ホスト、プロトコルを追加します。
+ ペイロードがなく、Content-Length が 0 の場合、API Gateway は Content-type ヘッダーをリクエストに追加します。

## Amazon API Gateway の HTTP および WebSocket API に関する重要な注意点
<a name="api-gateway-known-issues-http-and-websocket-apis"></a>
+ 署名バージョン 4A は、Amazon API Gateway で HTTP および WebSocket API 向けに正式にはサポートされていません。

## Amazon API Gateway の REST および WebSocket API に関する重要な注意点
<a name="api-gateway-known-issues-rest-and-websocket-apis"></a>
+ API Gateway では、REST と WebSocket API 間でのカスタムドメイン名の共有はサポートされていません。
+ ステージ名には、英数字、ハイフン、およびアンダースコアのみ含めることができます。最大長は 128 文字です。
+ `/ping` および `/sping` のパスは、サービスのヘルスチェック専用です。カスタムドメインを使用した API ルートレベルでの使用は良い結果を生みません。
+ API Gateway は現在、ログイベントを 1024 バイトに制限しています。リクエストやレスポンスの本文など、1024 バイトを超えるログイベントは、CloudWatch Logs への送信前に API Gateway によって切り捨てられます。
+ 現在、CloudWatch メトリクスではディメンション名と値が 255 文字の有効な XML 文字に制限されています (詳細については、[CloudWatch ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)を参照してください)。ディメンション値は、API 名、ラベル (ステージ) 名、およびリソース名を含む、ユーザーが定義した名前の関数です。これらの名前を選択するときは、CloudWatch メトリクスの制限を超えないように注意してください。
+ マッピングテンプレートの最大サイズは 300 KB です。

## Amazon API Gateway の WebSocket API に関する重要な注意点
<a name="api-gateway-known-issues-websocket-apis"></a>
+ API Gateway は最大 128 KB までのメッセージペイロードをサポートし、最大フレームサイズは 32 KB です。メッセージが 32 KB を超えた場合は、それぞれが 32 KB 以下の複数のフレームに分割する必要があります。大きなメッセージが受信された場合、接続は 1009 コードで閉じられます。

## Amazon API Gateway の REST API に関する重要な注意点
<a name="api-gateway-known-issues-rest-apis"></a>
+ プレーンテキストのパイプ文字 (`|`) と中かっこ文字 (`{` または `}`) は、リクエスト URL クエリ文字列ではサポートされておらず、URL エンコードする必要があります。
+ セミコロン文字 (`;`) はリクエスト URL クエリ文字列に対してサポートされておらず、この結果、データが分割されます。
+ REST API は、URL エンコードされたリクエストパラメータをデコードしてからバックエンド統合に渡します。UTF-8 リクエストパラメータの場合、REST API は、パラメータをデコードしてから、バックエンド統合にユニコードとして渡します。REST API は、パーセント文字 (`%`) を URL エンコードしてからバックエンド統合に渡します。
+ API Gateway コンソールを使用して API をテストするとき、バックエンドに自己署名証明書が存在する、中間証明書が証明書チェーンにない、または他の認識されない証明書関連の例外がバックエンドからスローされた場合に「不明なエンドポイントのエラー」レスポンスが返されることがあります。
+ プライベート統合の API [https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) または [https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) エンティティの場合は、[https://docs.aws.amazon.com/apigateway/latest/api/API_VpcLink.html](https://docs.aws.amazon.com/apigateway/latest/api/API_VpcLink.html) のハードコーディングされたリファレンスを削除した後で、それを削除する必要があります。それ以外の場合は、ダングリング統合があり、`Resource` または `Method` エンティティが削除されても VPC リンクがまだ使用中であることを示すエラーが表示されます。プライベート統合がステージ変数を通じて `VpcLink` を参照する場合、この動作は適用されません。
+ 以下のバックエンドでは、API Gateway と互換性のある方法では SSL クライアント認証がサポートされない場合があります。
  + [NGINX](https://nginx.org/en/)
  +  [Heroku](https://www.heroku.com/)
+ API Gateway は、ほとんどの [OpenAPI 2.0 仕様](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md)と [OpenAPI 3.0 仕様](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.1.md)をサポートしますが、次の例外があります。
  + パスセグメントには、英数字、アンダースコア、ハイフン、ピリオド、カンマ、コロン、中括弧のみを含めることができます。パスパラメータは、別のパスセグメントである必要があります。たとえば、「resource/\$1path\$1parameter\$1name\$1」は有効です。「resource\$1path\$1parameter\$1name\$1」は無効です。
  + モデル名は、英数字のみ含めることができます。
  + 入力パラメータについては、次の属性のみがサポートされています。`name`、`in`、`required`、`type`、`description`。他の属性は無視されます。
  + `securitySchemes` タイプを使用する場合は、`apiKey` にする必要があります。ただし、OAuth 2 および HTTP Basic 認証は [Lambda オーソライザー](apigateway-use-lambda-authorizer.md)によってサポートされています。OpenAPI 設定は、[ベンダー拡張機能](api-gateway-swagger-extensions-authorizer.md)によって実現されます。
  + この `deprecated` フィールドはサポートされておらず、エクスポートされた API では削除されます。
  + API Gateway モデルは、OpenAPI が使用する JSON スキーマではなく、[JSON スキーマのドラフト 4](https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-04) を使用して定義されます。
  + `discriminator`パラメータは、どのスキーマオブジェクトでもサポートされません。
  + `example` タグはサポートされません。
  + `nullable` フィールドはサポートされません。
  + `exclusiveMinimum` は API Gateway ではサポートされていません。
  + [単純なリクエストの検証](api-gateway-method-request-validation.md)には `maxItems` タグと `minItems` タグは含まれません。この問題を回避するには、インポートした後で、検証を行う前にモデルを更新します。
  + OpenAPI 3.0 では、同じスキーマ内の定義に `$ref` を使用する `oneOf`、`anyOf`、または `allOf` を持つことはできません。スキーマを直接入力するか、別の API Gateway モデルリソースを定義できます。詳細については、「[より複雑なモデルの作成](models-mappings-models.md#api-gateway-request-validation-model-more-complex)」を参照してください。
  + `oneOf` は、OpenAPI 2.0 または SDK の生成ではサポートされていません。
  + `readOnly` フィールドはサポートされません。
  + `$ref` を使用して他のファイルを参照することはできません。
  + `"500": {"$ref": "#/responses/UnexpectedError"}` フォームのレスポンス定義は、OpenAPI ドキュメントルートではサポートされません。回避策として、参照をインラインスキーマに置き換えます。
  + `Int32` タイプまたは `Int64` タイプの数値はサポートされていません。例を以下に示します。

    ```
    "elementId": {
        "description": "Working Element Id",
        "format": "int32",
        "type": "number"
    }
    ```
  + 10 進数型 (`"format": "decimal"`) は、スキーマ定義でサポートされません。
  + メソッドレスポンスでは、スキーマ定義をオブジェクト型にする必要があり、プリミティブ型にすることはできません。たとえば、`"schema": { "type": "string"}` はサポートされません。ただし、回避策として次のオブジェクト型を使用できます。

    ```
    "schema": {
         "$ref": "#/definitions/StringResponse"
                }
    
     "definitions": {
        "StringResponse": {
          "type": "string"
        }
      }
    ```
  + API Gateway は、OpenAPI 仕様に定義されているルートレベルのセキュリティを使用しません。したがって、オペレーションレベルでセキュリティを定義して、セキュリティが適切に適用されるようにする必要があります。
  + `default` のキーワードはサポートされていません。
+ API Gateway は、Lambda 統合または HTTP 統合を使用した処理方法に以下の制約と制限を設定しています。
  + ヘッダー名とクエリパラメータは大文字と小文字を区別する方法で処理されます。
  + 以下の表には、統合エンドポイントに送信されたり、統合エンドポイントから戻ったりしたときに、ドロップされたり、再マップされたり、それ以外の場合は変更されることがあるヘッダーがリストされています。この表で以下の点に注意してください。
    + `Remapped` は、ヘッダー名が `<string>` から `X-Amzn-Remapped-<string>` に変更されたことを意味します。

      `Remapped Overwritten` は、ヘッダー名が `<string>` から `X-Amzn-Remapped-<string>` に変更され、値が上書きされたことを意味します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-known-issues.html)

    \$1 [Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) の署名が含まれているか、`AWS_IAM` 認可が使用されている場合、`Authorization` ヘッダーは削除されます。
+ API Gateway で生成された API の Android SDK では、`java.net.HttpURLConnection` クラスを使用します。このクラスは、Android 4.4 以前を実行するデバイスでは、`WWW-Authenticate` ヘッダーから `X-Amzn-Remapped-WWW-Authenticate` への再マッピングに伴う 401 レスポンスに対して、処理されない例外をスローします。
+  API Gateway で生成された Java や、API の Android および iOS SDK とは異なり、API Gateway で生成された API の JavaScript SDK では、500 レベルのエラーの再試行はサポートされていません。
+  メソッドのテスト呼び出しでは、`application/json` のデフォルトコンテンツタイプを使用し、その他のコンテンツタイプの使用は無視されます。
+ `X-HTTP-Method-Override` ヘッダーを渡して API にリクエストを送信すると、API Gateway によってメソッドがオーバーライドされます。したがって、ヘッダーをバックエンドに渡すには、ヘッダーを統合リクエストに追加する必要があります。
+  リクエストの `Accept` ヘッダーに複数のメディアタイプが含まれている場合、API Gateway は最初の `Accept` メディアタイプのみ受け入れます。`Accept` メディタイプの順序を制御できず、バイナリコンテンツのメディアタイプがリストの先頭にない場合、API の `Accept` リストに最初の `binaryMediaTypes` メディアタイプを追加できます。 API Gateway によりコンテンツがバイナリとして返されます。たとえば、ブラウザで `<img>` 要素を使用して JPEG ファイルを送信するため、ブラウザがリクエストで `Accept:image/webp,image/*,*/*;q=0.8` を送信することがあります。`image/webp` を `binaryMediaTypes` リストに追加することで、エンドポイントは JPEG ファイルをバイナリとして受け取るようになります。
+ 現在、`413 REQUEST_TOO_LARGE` のデフォルトゲートウェイレスポンスのカスタマイズはサポートされていません。
+ API Gateway には、すべての統合レスポンスの `Content-Type` ヘッダーが含まれています。デフォルトでは、コンテンツタイプは `application/json` です。