

# API Gateway の単純な電卓の API
<a name="simple-calc-lambda-api"></a>

Amazon の単純な電卓の API では、3 つのメソッド (GET、POST、GET) を公開して [単純な電卓の Lambda 関数](simple-calc-nodejs-lambda-function.md) を呼び出します。この API を図に示すと次のようになります。

![\[生成された SDK の単純な電卓の API\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/simple-calc-api-console-hierarchy-new-console.png)


この 3 つのメソッドは方法は異なりますが、バックエンドの Lambda 関数に入力を渡して同じ操作を行います。
+ `GET /?a=...&b=...&op=...` メソッドは、クエリパラメータを使用して入力を指定します。
+ `POST /` メソッドは、`{"a":"Number", "b":"Number", "op":"string"}` の JSON ペイロードを使用して入力を指定します。
+ `GET /{a}/{b}/{op}` メソッドは、パスパラメータを使用して入力を指定します。

API Gateway では、HTTP メソッドとパス部分を組み合わせて、対応する SDK メソッド名を生成します (定義されていない場合)。ルートパス部分 (`/`) は `Api Root` と呼ばれます。たとえば、`GET /?a=...&b=...&op=...` の API メソッドのデフォルトの Java SDK メソッド名は `getABOp`、`POST /` のデフォルトの SDK メソッド名は `postApiRoot`、 `GET /{a}/{b}/{op}` のデフォルトの SDK メソッド名は `getABOp` です。個々の SDK は規則をカスタマイズすることができます。SDK 固有のメソッド名については、生成された SDK ソースのドキュメントを参照してください。

各 API メソッドで [operationName](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#operationName) プロパティを指定すると、デフォルトの SDK メソッド名を上書きできます。[API メソッドを作成する](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html)場合や、API Gateway REST API を使用して [API メソッドを更新する](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html)場合は、これを行うことができます。API Swagger の定義では、同じ結果を得るために `operationId` を設定できます。

この API に対して API Gateway で生成された SDK を使用してこれらのメソッドを 呼び出す方法を示す前に、メソッドの設定方法を簡単に再確認しましょう。詳細な手順については、「」を参照してください[API Gateway で REST API を開発する](rest-api-develop.md) API Gateway を初めて使用する場合は、まず「[AWS Lambda 統合を選択するチュートリアル](getting-started-with-lambda-integration.md)」を参照してください。

## 入力と出力のモデルの作成
<a name="simple-calc-lambda-api-create-models-for-input-and-output"></a>

SDK で厳密に型指定された入力を指定するには、API の `Input` モデルを作成します。レスポンス本文のデータ型を記述するには、`Output` モデルと `Result` モデルを作成します。

**入力、出力、結果のモデルを作成するには**

1. ナビゲーションペインで、**[モデル]** を選択します。

1. **[モデルの作成]** を選択します。

1. **[Name]** (名前) には **input** を入力します。

1. **[コンテンツタイプ]** に、「**application/json**」と入力します。

   一致するコンテンツタイプが見つからない場合、リクエストの検証は実行されません。コンテンツタイプに関係なく同じモデルを使用するには、「**\$1default**」と入力します。

1. **[モデルのスキーマ]** に次のモデルを入力します。

   ```
   {
       "$schema" : "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "a":{"type":"number"},
           "b":{"type":"number"},
           "op":{"type":"string"}
       },
       "title":"Input"
   }
   ```

1. **[モデルの作成]** を選択します。

1. 次の手順を繰り返して、`Output` モデルと `Result` モデルを作成します。

   `Output` モデルについては、**[モデルのスキーマ]** に次のように入力します。

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object",
       "properties": {
           "c": {"type":"number"}
       },
       "title": "Output"
   }
   ```

   `Result` モデルについては、**[モデルのスキーマ]** に次のように入力します。API ID `abc123` を自分の API ID に置き換えます。

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "input":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Input"
           },
           "output":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Output"
           }
       },
       "title":"Result"
   }
   ```

## GET / メソッドのクエリパラメータの設定
<a name="simple-calc-lambda-api-set-up-get-method-query-parameters"></a>

`GET /?a=..&b=..&op=..` メソッドのクエリパラメータは [**メソッドリクエスト**] で宣言します。

**GET / URL クエリ文字列パラメータを設定するには**

1. **[メソッドリクエスト]** セクションのルート (`/`) リソースの `GET` メソッドで、**[編集]** を選択します。

1. **[URL クエリ文字列パラメータ]** を選択してから、次の操作を行います。

   1. [**クエリ文字列の追加**] を選択します。

   1. **[Name]** (名前) には **a** を入力します。

   1. **[必須]** と **[キャッシュ]** はオフのままにしておきます。

   1. **[キャッシュ]** はオフのままにします。

   同じ手順を繰り返して、**b** という名前のクエリ文字列と **op** という名前のクエリ文字列を作成します。

1. **[保存]** を選択します。

## バックエンドへの入力としてペイロードのデータモデルを設定する
<a name="simple-calc-lambda-api-set-up-post-method-body-data-type"></a>

`POST /` メソッドについては、`Input` モデルを作成し、それをメソッドリクエストに追加して入力データの形式を定義します。

**バックエンドへの入力としてペイロードのデータモデルを設定するには**

1. **[メソッドリクエスト]** セクションのルート (`/`) リソースの `POST` メソッドで、**[編集]** を選択します。

1. **[リクエスト本文]** を選択します。

1. [**モデルの追加**] を選択します。

1. **[コンテンツタイプ]** に、「**application/json**」と入力します。

1. **[モデル]** で **[入力]** を選択します。

1. **[保存]** を選択します。

API のユーザーは、このモデルを使用して `Input` オブジェクトをインスタンス化することで、SDK を呼び出して入力を指定できます。このモデルがないと、Lambda 関数への JSON 入力を表すためにディクショナリオブジェクトの作成が必要になります。

## バックエンドからの結果出力のデータモデルを設定する
<a name="simple-calc-lambda-api-set-up-all-methods-result-data-type"></a>

3 つすべてのメソッドで、`Result` モデルを作成し、それをメソッドの `Method Response` に追加して、Lambda 関数から返される出力の形式を定義します。

**バックエンドからの結果出力のデータモデルを設定するには**

1. **/\$1a\$1/\$1b\$1/\$1op\$1** リソースを選択し、**[GET]** メソッドを選択します。

1. **[メソッドレスポンス]** タブの **[レスポンス 200]** で、**[編集]** を選択します。

1. **[リクエスト本文]** で、**[モデルを追加]** を選択します。

1. **[コンテンツタイプ]** に、「**application/json**」と入力します。

1. **[モデル]** で、**[結果]** を選択します。

1. **[保存]** を選択します。

API のユーザーは、このモデルを使って `Result` オブジェクトのプロパティを読み取ることで、正常な出力を解析できます。このモデルがないと、JSON 出力を表すためにディクショナリオブジェクトを作成することが必要になります。