データモデルを Amazon API Gateway の REST API に関連付けたいと思っています。
解決策
データモデルを API Gateway の REST API に関連付けるには、次の手順を実行します。
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 Gateway で基本的なリクエストの検証を設定する」を参照してください。
モデルを API メソッドに関連付ける
次の手順を実行します。
- API Gateway コンソールで API を開きます。
- ナビゲーションペインで、[リソース] を選択する。
- モデルに関連付ける API メソッドを選択します。
- [メソッドの実行] ペインで [メソッドリクエスト] を選択します。
- [リクエストの検証] で [本文を検証] を選択します。次に、チェックアイコンを選択して選択内容を保存します。
- [リクエスト本文]を拡張します。次に、[モデルを追加] を選択します。
- [コンテンツタイプ] に、モデルのコンテンツタイプを入力します。たとえば、アプリケーション/json と入力します。
- [モデル名] で、作成したモデルを選択します。
- チェックアイコンを選択して選択内容を保存します。
モデルをテストする
次の手順を実行します。
-
API の [リソース] リストから、モデルを関連付けた API メソッドを選択します。
-
[メソッドの実行] ペインで、[テスト] を選択します。
-
[リクエスト本文] に、作成したモデルスキーマと一致するリクエスト本文を入力します。
注: **application/json ** サンプルモデルをテストするには、以下のサンプルリクエスト本文を使用してください。
{ "UserID": "abc123", "Name": "Ana", "Age": 21}
-
[テスト] を選択します。
-
テスト応答が成功すると、返されるリクエスト本文はモデルスキーマと一致します。
(オプション) モデルのマッピングテンプレートを作成する
マッピングテンプレートを使用して、API の統合バックエンドに送信されるリクエストを変更できます。マッピングテンプレートを作成するには、次の手順を実行します。
-
API の [リソース] リストから、モデルを関連付けた API メソッドを選択します。
-
[メソッドの実行] ペインで、[統合リクエスト] を選択します。
-
[マッピングテンプレート] を展開します。
-
[リクエスト本文のパススルー] で、[テンプレートが定義されていない場合 (推奨)] を選択します。
-
[マッピングテンプレートを追加] を選択します。
-
[コンテンツタイプ] には、モデルのコンテンツタイプを入力します。たとえば、アプリケーション/json と入力します。
-
チェックアイコンを選択して選択内容を保存します。
-
[テンプレートを生成] で、作成したモデルを選択します。たとえば、**application/json ** サンプルモデルは次のように表示されます。
#set($inputRoot = $input.path('$')) { "UserID" : "$inputRoot.UserID", "Name" : "$inputRoot.Name", "Age" : $inputRoot.Age }
-
前述のテンプレートを変更して、API の統合バックエンドに渡す値が含まれるようにします。
-
[保存] を選択します。
REST API をデプロイして変更をコミットする
次の手順を実行します。
- ナビゲーションペインで、[リソース] を選択する。
- [アクション] を選択します。次に、[API をデプロイ] を選択します。
- [デプロイされるステージ]では、既存のステージを選択するか、[新しいステージ] を選択してステージを作成します。
重要: 新しいステージを作成する場合、[ステージ名] に名前を入力する必要があります。
- [デプロイ] を選択すると、デプロイされた API へのリクエストに使用する呼び出し URL を受け取ります。
- 呼び出し URL をコピーします。
REST API をテストする
モデルに関連付けられているメソッドとコンテンツタイプを使用するテストリクエストを API に送信します。リクエストが成功した場合は、200 OK の応答が返されます。リクエストが失敗すると、ステータスコード 400 が返されます。
テストリクエストを送信するには、API 開発ツールまたは curl コマンドを使用します。API Gateway での REST API 呼び出しの詳細については、「API Gateway で REST API を呼び出す」を参照してください。curl コマンドの詳細については、curl のウェブサイトを参照してください。
POST HTTP メソッドリクエストを使用して 200 OK 応答をテストする 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 }'