メニュー
Amazon API Gateway
開発者ガイド

API Gateway コンソールを使用してゲートウェイレスポンスをセットアップする

API Gateway コンソールを使用してゲートウェイレスポンスをカスタマイズするには

  1. API Gateway コンソールにサインインします。

  2. 既存の API を選択するか、新しい API を作成します。

  3. プライマリナビゲーションペインで API を展開し、API の下の [Gateway Responses] を選択します。

  4. [Gateway Responses] ペインで、レスポンスタイプを選択します。このチュートリアルでは、[Missing Authentication Token (403)] を例として使用します。

  5. API Gateway で生成された Status Code を変更し、API の要件を満たす別のステータスコードを返すことができます。この例では、カスタマイズにより、ステータスコードがデフォルト値 (403) から 404 に変更されます。これは、見つからないと見なすことができるサポートされていないリソースや無効なリソースをクライアントが呼び出したときに、このエラーメッセージが発生するためです。

  6. カスタムヘッダーを返すには、[Response Headers] の [Add Header] を選択します。例として、以下のカスタムヘッダーを追加します。

    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 ヘッダーにマッピングされます。

  7. [Body Mapping Templates] で、[Content Type] は application/json のままにして、[Body Mapping Template] エディタに次の本文マッピングテンプレートを入力します。

    { "message":"$context.error.messageString", "type": "$context.error.responseType", "statusCode": "'404'", "stage": "$context.stage", "resourcePath": "$context.resourcePath", "stageVariables.a": "$stageVariables.a" }

    この例では、$context プロパティと $stageVariables プロパティを、ゲートウェイレスポンス本文のプロパティにマッピングする方法を示しています。

  8. [Save] を選択します。

  9. 新規または既存のステージに API をデプロイします。

  10. 該当する API メソッドの呼び出し URL は https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId} であると仮定して、次の CURL コマンドを呼び出してテストします。

    curl -v -H 'x-amnz-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: a2be05a4-2ee5-11e7-bbf2-df131ec50ae6 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 Store であること、さらに API にステージ変数 a が定義されていることを前提としています。