API Gateway の API とモデルを関連付けるにはどうすればよいですか?

最終更新日: 2018 年 11 月 8 日

Amazon API Gateway の API にモデルを統合したいと考えています。どうすればよいですか?

簡単な説明

API 用のモデルを API Gateway で作成し、ペイロードのデータ形式を定義することができます。API Gateway のモデルには、JSON スキーマのドラフト 4を使用する必要があります。

次の手順に従い、モデルを API に関連付けます。

1.    モデルスキーマを記述し、API 用のモデルを作成します。

2.    モデルを API のメソッドに関連付けます。

3.    モデルをテストします。

4.    (オプション) モデルのマッピングテンプレートを作成します。

5.    API のデプロイとテストを行います。

解決方法

モデルスキーマを記述し API 用のモデルを作成する

API に関連付けるモデルスキーマを記述します。次のサンプルモデルでは、API ユーザーが UserIDName をリクエスト本文の中で渡す必要があります。このモデルでは、UserIDName の値は文字列で記述する必要があり、Age の値はすべて 18 以上の整数で指定する必要があります。

注: この例では application/jsonを使用します。

{
  "$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"]
}

モデルスキーマを記述したら、API Gateway コンソールを使用してモデルを作成します。

モデルを API メソッドに関連付ける

1.    API Gateway コンソールで、対象の API を開きます。

2.    ナビゲーションペインで、[リソース] をクリックします。

3.    モデルを関連付ける API メソッドを選択します。

4.    [メソッドの実行] ビューで、[メソッドリクエスト] をクリックします。

5.    [リクエスト検証] で、[本文を検証] をクリックします。次に、チェックアイコンをクリックして設定を保存します。

6.    [リクエスト本体] を展開します。[モデルを追加] をクリックします。

7.    [コンテンツタイプ] に、モデルのコンテンツタイプ (例: application/json) を入力します。

8.    [モデル名] から、ご自身が作成したモデルを選択します。

9.    チェックアイコンをクリックして設定を保存します。

モデルをテストする

1.    API の [リソース] 一覧から、モデルを関連付けた API メソッドを選択します。

2.    [メソッドの実行] ビューで、[テスト] をクリックします。

3.    [リクエスト本文] に、ご自身が作成したモデルスキーマに適合したリクエスト文を記述します。

注: application/json のサンプルモデルをテストするには、次の例のようなリクエスト本文が使用できます。

{ "UserID": "abc123", "Name":"Ana","Age":21}

4.    [テスト] をクリックします。

5.    このサンプルのリクエスト本文がモデルスキーマに適合する場合は、成功を示すレスポンスが表示されます。

(オプション) モデルのマッピングテンプレートを作成する

統合された API のバックエンドに送信されたリクエストを変更するため、マッピングテンプレートを作成する場合は、以下の手順にしたがいます。

1.    API の [リソース] 一覧から、モデルを関連付けた API メソッドを選択します。

2.    [メソッドの実行] ビューにある [統合のリクエスト] をクリックします。

3.    [マッピングテンプレート] を展開します。

4.    [リクエストボディのパススルー] で、[テンプレートが定義されていない場合 (推奨)] を選択します。

5.    [マッピングテンプレートの追加] をクリックします。

6.    [コンテンツタイプ] に、モデルのコンテンツタイプ (例: application/json) を入力します。次に、チェックアイコンをクリックして設定を保存します。

7.    [テンプレートの生成] で、ご自身が作成したモデルを選択します。

注: サンプルモデル application/json の場合は、次のように表示されます。

#set($inputRoot = $input.path('$')) { "UserID" : "$inputRoot.UserID", "Name" : "$inputRoot.Name", "Age" : $inputRoot.Age }

8.    統合された API のバックエンドに渡される値に応じ、テンプレートを修正します。

9.    [保存] をクリックします。

API のデプロイとテスト

1.    ナビゲーションペインで、[リソース] をクリックします。

2.    [アクション] をクリックします。次に、[API をデプロイ] を選択します。

3.    [デプロイのステージ] で既存のステージを選択するか、ステージを新しく作成する場合は、[新規ステージ] をクリックします。新しいステージを作成した場合は、[ステージ名] で名前を指定する必要もあります。

4.    [デプロイ] をクリックします。

モデルと関連付けられた、メソッドおよびコンテンツタイプを使用している API に対し、テストリクエストを送信することで、API のテストを行います。テストリクエストは、API 開発ツールまたは curl コマンドを使用することで送信できます。こちらの curl コマンドでは、サンプルモデルの application/json に対しテストリクエストを送信しています。

curl -X POST <YOUR-API-URL> -H 'Content-Type: application/json' -d '{ "UserID": "abc123", "Name":"Ana","Age":21}'

適切なメソッドとコンテンツタイプを使用してテストリクエストを送信した後は、「200 OK」というレスポンスの表示により処理の成功を確認します。

他には、無効なレスポンス本文のテストリクエストを送信してのテストも行えます。次のリクエストボディは、必要な属性 UserID が含まれていないため、サンプルのモデル application/json では無効となります。

{ "Name":"Ana", "Age":21}

無効なレスポンス本文を使用するテストリクエストを送信したら、「Invalid Request Body」のようなメッセージを含む 400 エラーが表示されることを確認します。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合