Amazon API Gateway の REST API にモデルを統合したいと考えています。これはどのように実行できますか。
解決方法
重要: API Gateway モデルでは、JSON スキーマドラフト 4 を使用する必要があります。
REST API に関連付けるモデルスキーマを記述します。
モデルスキーマの記述方法については、「モデルとマッピングテンプレートの操作」を参照してください。
モデルスキーマの例
**注:**このモデル例では、マッピングテンプレートを選択するためのデフォルトキーとして application/json が使用されており、以下が必要です。
API ユーザーは、リクエスト本文で UserID と Name を渡す必要があります。
UserID と Name は文字列値でなければなりません。
指定した Age はいずれも 18 以上の整数値でなければなりません。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "User",
"type": "object",
"properties": {
"UserID": {
"type": "string"
},
"Name": {
"type": "string"
},
"Age": {
"description": "Age in years",
"type": "integer",
"minimum": 18
}
},
"required": ["UserID", "Name"]
}
REST API 用のモデルを作成する
「API Gateway でモデルを作成する」の手順に従って、作成したスキーマを使用してモデルを作成します。
モデルを API メソッドに関連付けます。
1. API Gateway コンソール で API を開きます。
2. ナビゲーションペインで [リソース] を選択します。
3. モデルを関連付ける API メソッドを選択します。
4. [Method Execution (メソッドの実行)] ペインで、[Method Request (メソッドリクエスト) ]を選択します。
5. [Request Validator (リクエストの検証)] で [Validate body (ボディの検証)] を選択します。次に、チェックアイコンを選び、選択内容を保存します。
6. [Request Body (リクエストボディ)] を展開します。次に、[Add model (モデルの追加)] を選択します。
7. [Content type] に、モデルのコンテンツタイプ (たとえば、"application/json") を入力します。
8. [Model name (モデル名)] で、作成したモデルを選択します。
9. チェックアイコンを選び、選択内容を保存します。
モデルのテスト
1. API の [Resources (リソース)] リストから、モデルを関連付けた API メソッドを選択します。
2. [Method Execution (メソッドの実行)] ビューで [TEST] を選択します。
3. [Request Body (リクエストボディ)]に、作成したモデルスキーマと一致するリクエストボディを入力します。
注: application/json のサンプルモデルをテストするには、次の例のようなリクエスト本文が使用できます。
{ "UserID": "abc123", "Name":"Ana","Age":21}
4. [Test] を選択します。
5. 返されたリクエスト本文がモデルスキーマと一致すれば、テストレスポンスは成功です。
(オプション) モデルのマッピングテンプレートを作成します。
**注:**API の統合バックエンドに送信されるリクエストは、マッピングテンプレートを作成することで変更できます。
マッピングテンプレートを作成するには、次の操作を行います。
1. API の [Resources (リソース)] リストから、モデルを関連付けた API メソッドを選択します。
2. [メソッドの実行] ペインで、[統合リクエスト] を選択します。
3. [マッピングテンプレート] を展開します。
4. [Request body passthrough] (リクエストボディのパススルー) には、[When there are no templates defined (recommended)] (テンプレートが定義されていない場合 (推奨)) を選択します。
5. [マッピングテンプレートの追加] を選択します。
6. [Content-Type] に、モデルのコンテンツタイプ (たとえば、"application/json") を入力します。次に、チェックアイコンを選び、選択内容を保存します。
7. [Generate template(テンプレートの生成)] で、作成したモデルを選択します。
注: サンプルモデル application/json の場合は、次のように表示されます。
#set($inputRoot = $input.path('$')) { "UserID" : "$inputRoot.UserID", "Name" : "$inputRoot.Name", "Age" : $inputRoot.Age }
8. API の統合バックエンドに渡す値に応じてテンプレートを修正します。
9. [保存] を選択します。
REST API をデプロイ して変更を適用する
1. ナビゲーションペインで [リソース] を選択します。
2. [Actions] を選択します。次に、[Deploy API (API をデプロイ)] を選択します。
3. [Deployment stage (デプロイステージ)] で、既存のステージを選択するか、[New Stage (新しいステージ)] を選択してステージを作成します。
重要: 新しいステージを作成した場合は、[Stage name (ステージ名)] に名前を入力する必要もあります。
4. [Deploy (デプロイ) ] を選択します。デプロイされた API へのリクエストを行うための invoke URL が表示されます。
5. [Invoke URL (URL の呼び出し) ] をコピーしておきます。
REST API をテストする
モデルに関連付けられたメソッドとコンテンツタイプを使用するテストリクエストを API に送信します。リクエストが成功すると 200 OK レスポンスが返されます。リクエストが失敗すると、 400 ステータスコードが返されます。
テストリクエストは、API 開発ツールまたは curl コマンドを使って送信できます。
詳細については、「Amazon API Gateway での REST API の呼び出し」を参照してください。
POST HTTP メソッドリクエストを使用し、200 OK レスポンスをテストする curl コマンドの例
注: この curl コマンドは、この application/json モデル例のテストリクエストを送信します。このコマンドは 200 OK レスポンスを返します。
curl -X POST <API URL> -H 'Content-Type: application/json' -d '{ "UserID": "abc123", "Name":"Ana","Age":21}'
(オプション) POST HTTP メソッドリクエストを使用し、400 ステータスコードをテストする curl コマンドの例
**注:**この例のコマンドのリクエスト本文には、必須のサンプルモデル属性 UserID が含まれていないため、有効ではありません。このコマンドは 400 ステータスコードを返します。
curl -X POST <API URL> -H 'Content-Type: application/json' -d '{ "Name":"Ana", "Age":21}