

# API Gateway コンソールを使用して REST API のゲートウェイレスポンスをセットアップする
<a name="set-up-gateway-response-using-the-console"></a>

次の例は、API Gateway コンソールを使用して REST API のゲートウェイレスポンスをセットアップする方法を示しています。

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

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. REST API を選択します。

1. メインナビゲーションペインで、**[ゲートウェイレスポンス]** を選択します。

1. レスポンスタイプを選択し、**[編集]** を選択します。このチュートリアルでは、**[認証トークンが見つかりません]** を例として使用します。

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

1. カスタムヘッダーを返すには、**[レスポンスヘッダー]** で **[ヘッダーの追加]** を選択します。例として、以下のカスタムヘッダーを追加します。

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

1. **[レスポンステンプレート]** で、**[コンテンツタイプ]** を `application/json` にしたまま、**[テンプレートの本文]** エディタに次の本文マッピングテンプレートを入力します。

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

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

1. **[Save changes]** (変更の保存) をクリックします。

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

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

```
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 Store](http://petstore-demo-endpoint.execute-api.com/petstore/pets) であること、さらに API にステージ変数 `a` が定義されていることを前提としています。