API Gateway コンソールを使用して REST API のゲートウェイレスポンスをセットアップする
次の例は、API Gateway コンソールを使用して REST API のゲートウェイレスポンスをセットアップする方法を示しています。
API Gateway コンソールを使用してゲートウェイレスポンスをカスタマイズするには
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 REST API を選択します。
-
メインナビゲーションペインで、[ゲートウェイレスポンス] を選択します。
-
レスポンスタイプを選択し、[編集] を選択します。このチュートリアルでは、[認証トークンが見つかりません] を例として使用します。
-
API Gateway で生成された [ステータスコード] を変更し、API の要件を満たす別のステータスコードを返すことができます。この例では、カスタマイズにより、ステータスコードがデフォルト値 (
403
) から404
に変更されます。これは、見つからないと見なすことができるサポートされていないリソースや無効なリソースをクライアントが呼び出したときに、このエラーメッセージが発生するためです。 -
カスタムヘッダーを返すには、[レスポンスヘッダー] で [ヘッダーの追加] を選択します。例として、以下のカスタムヘッダーを追加します。
Access-Control-Allow-Origin:'a.b.c' x-request-id:method.request.header.x-amzn-RequestId x-request-path:method.request.path.petId x-request-query:method.request.querystring.q
前述のヘッダーマッピングで、静的ドメイン名 (
'a.b.c'
) はAllow-Control-Allow-Origin
ヘッダーにマッピングされて、CORS から API へのアクセスが許可されます。x-amzn-RequestId
パス変数はレスポンスのrequest-id
にマッピングされます。受信リクエストのpetId
パス変数はレスポンスのrequest-path
ヘッダーにマッピングされます。元のリクエストのq
クエリパラメータはレスポンスのrequest-query
ヘッダーにマッピングされます。 -
[レスポンステンプレート] で、[コンテンツタイプ] を
application/json
にしたまま、[テンプレートの本文] エディタに次の本文マッピングテンプレートを入力します。{ "message":"$context.error.messageString", "type": "$context.error.responseType", "statusCode": "'404'", "stage": "$context.stage", "resourcePath": "$context.resourcePath", "stageVariables.a": "$stageVariables.a" }
この例では、
$context
プロパティと$stageVariables
プロパティを、ゲートウェイレスポンス本文のプロパティにマッピングする方法を示しています。 -
[Save changes] (変更の保存) をクリックします。
-
新規または既存のステージに API をデプロイします。
該当する API メソッドの呼び出し URL は https://
であると仮定して、次の CURL コマンドを呼び出してゲートウェイレスポンスをテストします。o81lxisefl
.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}
curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1
追加のクエリ文字列パラメータ q=1
は、API と互換性がないため、指定したゲートウェイレスポンスからエラーが返されます。次のようなゲートウェイレスポンスが返されます。
> GET /custErr/pets/5?q=1 HTTP/1.1 Host: o81lxisefl.execute-api.us-east-1.amazonaws.com User-Agent: curl/7.51.0 Accept: */* HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 334 Connection: keep-alive Date: Tue, 02 May 2017 03:15:47 GMT x-amzn-RequestId: 123344566 Access-Control-Allow-Origin: a.b.c x-amzn-ErrorType: MissingAuthenticationTokenException header-1: static x-request-query: 1 x-request-path: 5 X-Cache: Error from cloudfront Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront) X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA== { "message":"Missing Authentication Token", "type": MISSING_AUTHENTICATION_TOKEN, "statusCode": '404', "stage": custErr, "resourcePath": /pets/{petId}, "stageVariables.a": a }
前述の例では、API バックエンドが Pet Storea
が定義されていることを前提としています。