1. 概要
エラーマッピングタイプのプラグインを使用して、クライアントの要求に応じて定義されたマッピングルールに基づいて、バックエンドエラー応答を新しいエラー応答にマッピングします。
2. クイックスタート
次の例は、API操作のバックエンドによって返されるエラーレスポンスを示しています。 HTTPステータスコードは200ですが、レスポンス本文にはJSON文字列のエラーメッセージが含まれています。
HTTP 200 OK
Content-Type:application/json
{"req_msg_id":"d02afa56394f4588832bed46614e1772","result_code":"ROLE_NOT_EXISTS"}
クライアントが200以外のHTTPステータスコードを受信したいが、バックエンド設定を変更してこれを実現したくないと仮定します。 たとえば、クライアントには次のエラー応答が予想されます。
HTTP 404
X-Ca-Error-Message: Role Not Exists, ResultId=d02afa56394f4588832bed46614e1772
この場合、次のサンプルを使用してエラーマッピングタイプのプラグインを設定し、そのプラグインを関連するAPI操作にバインドできます。
---
# The parameters that are involved in mapping.
parameters:
statusCode: "StatusCode"
resultCode: "BodyJsonField:$.result_code"
resultId: "BodyJsonField:$.req_msg_id"
# The mapping condition under which an error response needs to be mapped.
errorCondition: "$statusCode = 200 and $resultCode <> 'OK'"
# The parameter in an error response that is used to specify the error code and hit mapping rules.
errorCode: "resultCode"
# The mapping rules.
mappings:
- code: "ROLE_NOT_EXISTS"
statusCode: 404
errorMessage: "Role Not Exists, RequestId=${resultId}"
- code: "INVALID_PARAMETER"
statusCode: 400
errorMessage: "Invalid Parameter, RequestId=${resultId}"
# Optional. The default mapping rule.
defaultMapping:
statusCode: 500
errorMessage: "Unknown Error, ${resultCode}, RequestId=${resultId}"
この例では、HTTPステータスコードとエラー応答のresult_code
パラメーターを使用して、マッピング条件を定義します。 エラーレスポンスのHTTPステータスコードが200で、result_code
パラメーターの値がOK
でない場合、マッピングが開始されます。 result_code
パラメーターは、マッピングルールを定義するために使用されます。 1つのルールは、result_codeパラメーターの値がROLE_NOT_EXISTS
の場合、元のHTTPステータスコードが404にマップされることです。 もう1つのルールは、result_codeパラメーターの値がINVALID_PARAMETER
の場合、元のHTTPステータスコードが400にマップされることです。 デフォルトのマッピング規則も定義される。 result_codeパラメーターの値が前の値のどちらでもない場合、元のHTTPステータスコードは500にマップされます。
3. プラグインの設定とマッピングルール
3.1. プラグインの設定
エラーマッピングタイプのプラグインをJSON形式またはYAML形式で設定できます。 次のパラメータを指定できます。
parameters
: 必須です。 マッピングに含まれるパラメーター。 これらのパラメーターは、map
形式のキーと値のペアとして指定されます。 パラメーターの定義方法と条件式の記述方法については、「パラメーターと条件式の使用」をご参照ください。errorCondition
: 必須です。 エラー応答をマッピングする必要があるマッピング条件。 条件式の結果がtrue
の場合、マッピングが開始されます。errorCode
: オプション。 エラーコードとヒットマッピングルールを指定するために使用されるエラーレスポンスのパラメーター。errorCode
パラメーターの値で指定されたエラーコードは、マッピングルールのcode
パラメーターの値と比較されます。mappings
: 必須です。 マッピングルール。 API Gatewayは、これらのマッピングルールに基づいてエラー応答を再構築します。 マッピングルールには、次のパラメーターが含まれます。code
: 省略可能です。errorCode
パラメーターの値で指定されたエラーコードが同じであるエラーレスポンスを識別するために使用される指定値。 このパラメーターの値は、すべてのマッピングルール間で一意である必要があります。 エラー応答のエラーコードが現在のマッピングルールのcode
パラメーターの値と同じである場合、エラー応答は現在のルールに基づいてマッピングされます。condition
: オプション。 現在のマッピングルールに基づいてエラー応答をマッピングする必要がある条件。 条件式の結果がtrue
の場合、エラーレスポンスは現在のルールに基づいてマッピングされます。statusCode
: 必須です。 現在のマッピングルールに基づいてエラーレスポンスをマッピングする必要がある場合に、エラーレスポンスの元のHTTPステータスコードを置き換えるHTTPステータスコード。errorMessage
: オプション。 マッピング後にクライアントに返されるエラーメッセージ。 このパラメーターの値は、元のバックエンドエラー応答のパラメーターから取得され、エラーログのerrorMessage
パラメーターにも保存されます。 マッピング後のエラー応答では、このパラメーターはX-Ca-error-Message
ヘッダーフィールドの値として表示されます。responseHeaders
: オプション。 現在のマッピングルールがヒットした場合に、マッピング後にエラーレスポンスに含まれるレスポンスヘッダーフィールド。 このパラメーターは、map
形式のキーと値のペアとして指定します。responseBody
: オプション。 現在のマッピングルールに基づいてエラーレスポンスをマッピングする必要がある場合に、エラーレスポンスの元のレスポンスボディを上書きするレスポンスボディ。
defaultMapping
: オプション。 デフォルトのマッピングルール。 エラー応答がmappings
パラメーターで定義されているルールにヒットしない場合、エラー応答は既定のマッピングルールに基づいてマッピングされます。statusCode
: 必須です。 エラーレスポンスをデフォルトのマッピングルールに基づいてマッピングする必要がある場合に、エラーレスポンスの元のHTTPステータスコードを置き換えるHTTPステータスコード。errorMessage
: オプション。 マッピング後にクライアントに返されるエラーメッセージ。 このパラメーターの値は、元のバックエンドエラー応答のパラメーターから取得され、エラーログのerrorMessage
パラメーターにも保存されます。 マッピング後のエラー応答では、このパラメーターはX-Ca-error-Message
ヘッダーフィールドの値として表示されます。responseHeaders
: オプション。 デフォルトのマッピングルールがヒットした場合に、マッピング後にエラーレスポンスに含まれるレスポンスヘッダーフィールド。 このパラメーターは、map
形式のキーと値のペアとして指定します。responseBody
: オプション。 エラーレスポンスをデフォルトのマッピングルールに基づいてマッピングする必要がある場合に、エラーレスポンスの元のレスポンスボディを上書きするレスポンスボディ。
エラーマッピングタイプのプラグインを設定するときは、次の項目に注意してください。
mappingCondition
およびmappings[].condition
で条件式を記述するために使用されるパラメーターは、parameters
パラメーターで定義する必要があります。 それ以外の場合、プラグインは機能せず、エラーを報告します。 パラメーターの定義方法と条件式の記述方法については、「パラメーターと条件式の使用」をご参照ください。errorCode
パラメーターの値は、parameters
パラメーターで定義されているパラメーターの名前である必要があります。マッピングルールを設定するときは、
code
パラメーターとcondition
パラメーターの少なくとも1つを指定する必要があります。code
パラメーターを指定する場合、このパラメーターの値はすべてのマッピングルール間で一意である必要があります。condition
パラメーターを指定する場合、条件式を要件を満たす順序で記述する必要があります。 これは、条件の順序が優先順位を決定するためです。errorMessage
およびresponseBody
パラメーターを"${Code}: ${Message}"
形式に置き換えることができます。 この形式のCodeおよびMessageパラメーターの値は、parameters
パラメーターで定義されているパラメーターから取得する必要があります。responseHeaders
パラメーターを${Message}
形式に置き換えることもできます。responseBody
パラメーターを指定しない場合、マッピング後にクライアントに返されるエラーレスポンスのレスポンスボディは、元のエラーレスポンスのレスポンスボディと同じになります。responseHeaders
パラメーターを使用して、バックエンドエラー応答の対応するヘッダーフィールドを置き換えるヘッダーフィールドとその値を指定できます。 ヘッダーフィールドの値を"
として指定した場合、このヘッダーフィールドはマッピング後に削除されます。 このパラメーターを指定しない場合、マッピング後にクライアントに返されるエラー応答のヘッダーフィールドは、元のエラー応答のヘッダーフィールドと同じになります。defaultMapping
パラメーターを指定せず、エラー応答がマッピングルールにヒットしない場合、元のバックエンドエラー応答がクライアントに返されます。
3.2. マッピングに関わるパラメータ
次のコードスニペットに示すように、マッピングに関与するパラメーターをparameters
パラメーターのキーと値のペアとして指定する必要があります。 各キーはパラメータの名前です。 各値はLocation:Name
形式で指定されます。 この形式は、パラメータの値が応答またはシステムのコンテキストから取得されることを示します。
---
# The parameters that are involved in mapping.
parameters:
statusCode: "StatusCode"
resultCode: "BodyJsonField:$.result_code"
resultId: "BodyJsonField:$.req_msg_id"
'Location:Name' 形式を使用してパラメーター値を取得する場合は、次の場所を指定できます。 場所の詳細については、「パラメーターと条件式の使用」をご参照ください。
位置 | ソース | 説明 |
StatusCode | レスポンス | バックエンドエラー応答のHTTPステータスコード ( |
ErrorCode | レスポンス | API Gatewayのシステムエラー応答のエラーコード。 |
エラーメッセージ | レスポンス | API Gatewayのシステムエラー応答のエラーメッセージ。 |
ヘッダー | レスポンス |
|
BodyJsonField | レスポンス |
APIリクエストまたはバックエンドレスポンスの本文にあるJSON文字列を取得します。
|
System | レスポンス |
|
トークン | レスポンス | 認証にJSON Web Token (JWT) をOAuth2で使用する場合、 |
ErrorCode
とErrorMessage
の場所は、API Gatewayのシステムエラー応答のエラーコードとエラーメッセージを取得するために使用されます。 詳細については、「エラーコード一覧」をご参照ください。BodyJsonField
の場所を使用して、バックエンド応答の本文でJSON文字列を取得できます。 ただし、レスポンス本文のサイズが16,380バイトを超える場合、取得される文字列はnull
を使用します。
3.3. 働くメカニズム
以下のアクションは、エラーマッピングタイプのプラグインがどのように機能するかを説明します。
手順1:
parameters
パラメーターで定義されているパラメーターのリストに基づいて、バックエンドエラー応答とシステムのコンテキストからパラメーターの値を取得します。ステップ2: パラメーターと取得した値を使用して、
errorCondition
パラメーターに記述された条件式を実行します。 結果がtrue
の場合は、次のステップに進みます。 結果が偽
である場合、プロセスは終了する。手順3:
errorCode
パラメーターが指定されている場合、errorCode
パラメーターの値で指定されているエラーコードを取得します。 次に、エラーコードがマッピングルールのcode
パラメーターの値と等しいかどうかを確認します。手順4: 手順3でマッピングルールがヒットしなかった場合、マッピングルールの
condition
パラメーターに記述されている条件式を順番に実行します。ステップ5: ステップ3またはステップ4でマッピングルールがヒットした場合、元のエラー応答はマッピングルールに基づいてマッピングされます。 それ以外の場合、元のエラー応答はデフォルトのマッピングルールに基づいてマッピングされます。
3.4. システムエラー応答とエラーログのマッピング
API Gatewayでは、チェック、検証、スロットリング、プラグイン操作などのプロセスでシステムエラーが発生する可能性があります。 詳細については、「エラーコード表」をご参照ください。
ErrorCode
を場所として使用して、システムエラー応答の情報を取得できます。 たとえば、クライアントはHTTPステータスコード200のみをサポートし、API Gatewayによって返されるHTTPステータスコード429をHTTPステータスコード200にマッピングします。システムエラー応答の場合、
StatusCode
、Header
、BodyJsonField
などの場所から取得される値はすべてnull
です。 エラーマッピングタイプのプラグインのマッピング条件を定義する場合、バックエンドエラー応答の場合、ErrorCode
の場所から取得される値はO
であることに注意してください。システムエラー応答のエラーコードは、
X-Ca-error-code
ヘッダーフィールドの値として返され、エラーログのerrorCode
パラメーターにも格納されます。 この値は、エラーマッピングタイプのプラグインを使用して上書きすることはできません。エラーログの
statusCode
パラメーターは、API Gatewayからクライアントに送信されるHTTPステータスコードの値を記録します。 この値は、エラーマッピングタイプのプラグインを使用して上書きできます。
4. 設定例
4.1. エラーマッピングのエラー応答でエラーコードを使用する
マッピング
---
# The parameters that are involved in mapping.
parameters:
statusCode: "StatusCode"
resultCode: "BodyJsonField:$.result_code"
resultId: "BodyJsonField:$.req_msg_id"
# The mapping condition under which an error response needs to be mapped.
errorCondition: "$statusCode = 200 and $resultCode <> 'OK'"
# The parameter in an error response that is used to specify the error code and hit mapping rules.
errorCode: "resultCode"
# The mapping rules.
mappings:
- code: "ROLE_NOT_EXISTS"
statusCode: 404
errorMessage: "Role Not Exists, RequestId=${resultId}"
- code: "INVALID_PARAMETER"
statusCode: 400
errorMessage: "Invalid Parameter, RequestId=${resultId}"
# Optional. The default mapping rule.
defaultMapping:
statusCode: 500
errorMessage: "Unknown Error, ${resultCode}, RequestId=${resultId}"
5. 制限事項
Error Mappingタイプの各プラグインには、最大16個のパラメーターを定義できます。
各条件式には、最大512文字を使用できます。
BodyJsonField
の場所を使用してエラーレスポンスの本文でJSON文字列を取得する場合、レスポンス本文のサイズは最大16,380バイトになります。 レスポンス本文のサイズがこの制限を超えると、取得される文字列はnullになります。エラーマッピングタイプの各プラグインに対して、最大16,380バイトのメタデータを設定できます。
エラーマッピングタイプの各プラグインに対して、
condition
パラメーターを使用して最大20個のマッピングルールを設定できます。