

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

# API Gateway 中 REST API 的模擬整合
<a name="how-to-mock-integration"></a>

Amazon API Gateway 支援 API 方法的模擬整合。此功能可讓 API 開發人員直接從 API Gateway 產生 API 回應，而不需要整合後端。您是 API 開發人員，在專案開發完成之前，可以使用此功能來解鎖需要使用 API 的相依團隊。您也可以使用此功能來佈建您 API 的登錄頁面，以提供 API 的概觀，並導覽至 API。如需這類登錄頁面的範例，請參閱[教學課程：匯入範例來建立 REST API](api-gateway-create-api-from-example.md) 中所討論的範例 API 之根資源上的 GET 方法整合請求和回應。

作為 API 開發人員，您可決定 API Gateway 回應如何模擬整合請求。因此，您設定方法的整合請求和整合回應，以將回應與特定狀態碼建立關聯。若要讓具有模擬整合的方法傳回 `200` 回應，請設定整合請求內文映射範本來傳回下列內容。

```
{"statusCode": 200}
```

設定 `200` 整合回應，以具有下列內文映射範本，例如：

```
{
    "statusCode": 200,
    "message": "Go ahead without me."
}
```

 例如，同樣地，若要讓方法傳回 `500` 錯誤回應，請設定整合請求內文映射範本來傳回下列內容。

```
{"statusCode": 500}
```

例如，設定具有下列映射範本的 `500` 整合回應：

```
{
    "statusCode": 500,
    "message": "The invoked method is not supported on the API resource."
}
```

或者，您可以讓模擬整合方法傳回預設整合回應，而不需要定義整合請求映射範本。預設整合回應具有未定義的 **HTTP status regex (HTTP 狀態 regex)**。請確定已設定適當的傳遞行為。

**注意**  
模擬整合並不支援大型回應範本。如果您的使用案例需要這類範本，應考慮改用 Lambda 整合。

您可使用整合請求映射範本來插入應用程式邏輯，以根據特定條件決定要傳回的模擬整合回應。例如，您可以在傳入請求上使用 `scope` 查詢參數，決定是要傳回成功回應還是錯誤回應：

```
{
  #if( $input.params('scope') == "internal" )
    "statusCode": 200
  #else
    "statusCode": 500
  #end
}
```

因此，模擬整合方法可讓內部呼叫通過，同時拒絕具有錯誤回應之其他類型的呼叫。



在本節中，我們將說明如何使用 API Gateway 主控台來啟用 API 方法的模擬整合。

**Topics**
+ [使用 API Gateway 主控台啟用模擬整合](how-to-mock-integration-console.md)

# 使用 API Gateway 主控台啟用模擬整合
<a name="how-to-mock-integration-console"></a>

您必須在 API Gateway 中有可用的方法。請遵循中的說明進行[教學：建立具有 HTTP 非代理整合的 REST API](api-gateway-create-api-step-by-step.md)

1. 選擇 API 資源，並選擇**建立方法**。

   若要建立方法，請執行下列動作：

   1. 針對**方法類型**，選取某個方法。

   1. 針對**整合類型**，選取**模擬**。

   1. 選擇**建立方法**。

   1. 在**方法請求**索引標籤上，針對**方法請求設定**，選擇**編輯**。

   1. 選擇 **URL 查詢字串參數**。選擇**新增查詢字串**，然後針對**名稱**輸入 **scope**。這個查詢參數會判斷發起人是否為內部。

   1. 選擇**儲存**。

1. 在**方法回應**索引標籤上，選擇**建立回應**，然後執行下列動作：

   1. 針對 **HTTP 狀態**，輸入 **500**。

   1. 選擇**儲存**。

1. 在**整合請求**索引標籤上，針對**整合請求設定**，選擇**編輯**。

1. 選擇**對應範本**，然後執行下列動作：

   1. 選擇**新增映射範本**。

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

   1. 針對**範本內文**，輸入下列內容：

      ```
      {
        #if( $input.params('scope') == "internal" )
          "statusCode": 200
        #else
          "statusCode": 500
        #end
      }
      ```

   1. 選擇**儲存**。

1. 在**整合回應**索引標籤上，針對**預設 - 回應**選擇**編輯**。

1. 選擇**對應範本**，然後執行下列動作：

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

   1. 針對**範本內文**，輸入下列內容：

      ```
      {
          "statusCode": 200,
          "message": "Go ahead without me"
      }
      ```

   1. 選擇**儲存**。

1. 選擇**建立回應**。

   若要建立 500 回應，請執行下列動作：

   1. 對於 **HTTP 狀態 regex**，輸入 **5\$1d\$12\$1**。

   1. 針對**方法回應狀態**，選取 **500**。

   1. 選擇**儲存**。

   1. 針對 **5\$1d\$12\$1 - 回應**，選擇**編輯**。

   1. 選擇**對應範本**，然後選擇**新增對應範本**。

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

   1. 針對**範本內文**，輸入下列內容：

      ```
      {
          "statusCode": 500,
          "message": "The invoked method is not supported on the API resource."
      }
      ```

   1. 選擇**儲存**。

1.  選擇**測試**標籤。您可能需要選擇向右箭頭按鈕才能顯示此索引標籤。若要測試模擬整合，請執行下列動作：

   1. 在**查詢字串**下，輸入 `scope=internal`。選擇 **Test (測試)**。測試結果顯示：

      ```
      Request: /?scope=internal
      Status: 200
      Latency: 26 ms
      Response Body
      
      {
        "statusCode": 200,
        "message": "Go ahead without me"
      }
      
      Response Headers
      
      {"Content-Type":"application/json"}
      ```

   1. 在 `Query strings` 下輸入 `scope=public`，或將其空白。選擇 **Test (測試)**。測試結果顯示：

      ```
      Request: /
      Status: 500
      Latency: 16 ms
      Response Body
      
      {
        "statusCode": 500,
        "message": "The invoked method is not supported on the API resource."
      }
      
      Response Headers
      
      {"Content-Type":"application/json"}
      ```

您也可以在模擬整合回應中傳回標頭，方法是先將標頭新增至方法回應，然後在整合回應中設定標頭映射。事實上，這就是 API Gateway 主控台透過傳回 CORS 必要標頭來啟用 CORS 支援的作法。