

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# API Gateway 中的簡單計算器 API
<a name="simple-calc-lambda-api"></a>

我們的簡易計算器 API 公開三種方法 (GET、POST、GET) 來呼叫[簡易計算器的 Lambda 函數](simple-calc-nodejs-lambda-function.md)。此 API 的圖形呈現如下：

![\[所產生開發套件的簡易計算器 API\]](http://docs.aws.amazon.com/zh_tw/apigateway/latest/developerguide/images/simple-calc-api-console-hierarchy-new-console.png)


這三種方法顯示提供後端 Lambda 函數輸入來執行相同操作的不同方式：
+ `GET /?a=...&b=...&op=...` 方法會使用查詢參數來指定輸入。
+ `POST /` 方法使用 `{"a":"Number", "b":"Number", "op":"string"}` 的 JSON 承載來指定輸入。
+ `GET /{a}/{b}/{op}` 方法會使用路徑參數來指定輸入。

如果未定義，則 API Gateway 會結合 HTTP 方法和路徑部分，以產生對應的軟體開發套件方法名稱。根路徑部分 (`/`) 稱為 `Api Root`。例如，API 方法 `GET /?a=...&b=...&op=...` 的預設 Java 開發套件方法名稱是 `getABOp`、`POST /` 的預設開發套件方法名稱是 `postApiRoot`，而 `GET /{a}/{b}/{op}` 的預設開發套件方法名稱是 `getABOp`。個別開發套件可能會自訂慣例。請參閱開發套件特定方法名稱之所產生開發套件來源中的文件。

您可以且應該在每個 API 方法上指定 [operationName](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#operationName) 屬性，來覆寫預設軟體開發套件方法名稱。您可以在使用 API Gateway REST API [建立 API 方法](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html)或[更新 API 方法](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html)時這麼做。在 API Swagger 定義中，您可以設定 `operationId` 以達到相同的結果。

顯示如何使用此 API 之 API Gateway 所產生的開發套件來呼叫這些方法之前，讓我們短暫回想一下如何設定它們。如需詳細說明，請參閱[在 APIs 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>

為了在開發套件中指定強型別輸入，我們建立 API 的 `Input` 模型。為了描述回應內文資料類型，我們建立 `Output` 模型與 `Result` 模型。

**建立輸入、輸出和結果的模型**

1. 在主導覽窗格中，選擇**模型**。

1. 選擇**建立模型**。

1. 對於**名稱**，輸入 **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=..` 方法，在 **Method Request** (方法請求) 中宣告查詢參數：

**設定 GET / URL 查詢字串參數**

1. 在**方法請求**區段中，針對根 (`/`) 資源上的 `GET` 方法，選擇**編輯**。

1. 選擇 **URL 查詢字串參數**，然後執行下列動作：

   1. 選擇**新增查詢字串**。

   1. 對於**名稱**，輸入 **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. 選擇 **Add model (新增模型)**。

1. 針對**內容類型**，輸入 **application/json**。

1. 針對**模型**，選取**輸入**。

1. 選擇**儲存**。

使用此模型，將 `Input` 物件執行個體化，您的 API 客戶就可以呼叫開發套件來指定輸入。沒有此模型，您的客戶就需要建立字典物件來代表 Lambda 函數的 JSON 輸入。

## 設定後端結果輸出的資料模型
<a name="simple-calc-lambda-api-set-up-all-methods-result-data-type"></a>

針對所有這三種方法，我們建立 `Result` 模型，並將它新增至方法的 `Method Response` 來定義 Lambda 函數所傳回輸出的形狀。

**設定後端結果輸出的資料模型**

1. 選取 **/\$1a\$1/\$1b\$1/\$1op\$1** 資源，然後選擇 **GET** 方法。

1. 在**方法回應**索引標籤上的**回應 200** 下，選擇**編輯**。

1. 在**請求內文**下，選擇**新增模型**。

1. 針對**內容類型**，輸入 **application/json**。

1. 針對**模型**，選取**結果**。

1. 選擇**儲存**。

使用此模型，您的 API 客戶可以讀取 `Result` 物件的屬性來剖析成功的輸出。沒有此模型，客戶就需要建立字典物件來代表 JSON 輸出。