

# 针对 API Gateway 中的 REST API 的模拟集成
<a name="how-to-mock-integration"></a>

Amazon API Gateway 支持 API 方法的模拟集成。借助该特征，API 开发人员可以直接从 API Gateway 生成 API 响应，无需集成后端。作为 API 开发人员，您可以在项目开发结束之前使用此特征，以便不妨碍需要使用 API 开展工作的相关团队。您还可以使用此特征来预配置 API 的登录页面，该网页可提供您的 API 概述和导航。有关此类登录页面的示例，请参阅 中所述示例 API 的根资源上 GET 方法的集成请求和响应[教程：通过导入示例创建 REST API](api-gateway-create-api-from-example.md)

作为 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 状态正则表达式)** 的响应。请确保设置了合适的传递行为。

**注意**  
模拟集成并非用于支持大型响应模板。如果您的使用案例需要它们，您应该考虑改为使用 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 状态正则表达式**，输入 **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. 在 `scope=public` 下输入 `Query strings` 或将其留空。选择 **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 支持的方法。