

# 教程：使用 HTTP 非代理集成创建 REST API
<a name="api-gateway-create-api-step-by-step"></a>

 在本教程中，您将使用 Amazon API Gateway 控制台从头开始创建 API。您可以将控制台看作一个 API 设计室，并将其用于确定 API 的特征、试验其行为、构建 API 并分阶段部署您的 API。

**Topics**
+ [使用 HTTP 自定义集成创建 API](#api-gateway-create-resource-and-methods)
+ [（可选）映射请求参数](#api-gateway-create-resources-and-methods-next-steps)

## 使用 HTTP 自定义集成创建 API
<a name="api-gateway-create-resource-and-methods"></a>

 本部分详细介绍了创建资源、在资源上公开方法、配置方法来实现所需的 API 行为以及测试和部署 API 的步骤。

在此步骤中，您将创建空 API。在以下步骤中，您将创建资源和方法，以使用非代理 HTTP 集成将 API 连接到 `http://petstore-demo-endpoint.execute-api.com/petstore/pets` 端点。

**创建 API**

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 如果您是第一次使用 API Gateway，您会看到一个介绍服务特征的页面。在 **REST API** 下，选择**生成**。当**创建示例 API** 弹出框出现时，选择**确定**。

   如果这不是您首次使用 API Gateway，请选择**创建 API**。在 **REST API** 下，选择**生成**。

1.  对于 **API 名称**，请输入 **HTTPNonProxyAPI**。

1. （可选）对于**描述**，输入描述。

1. 将 **API 端点类型**设置保留为**区域**。

1. 为 **IP 地址类型**选择 **IPv4**。

1. 选择**创建 API**。

**资源**树显示了不带任何方法的根资源 (`/`)。在本练习中，我们将创建一个与 PetStore 网站 (http://petstore-demo-endpoint.execute-api.com/petstore/pets) 进行 HTTP 自定义集成的 API。出于说明目的，我们将创建一个 `/pets` 资源作为根的子项，并在该资源上公开一个 GET 方法，以便客户端从 PetStore 网站上检索可用宠物项目列表。

**创建 /pets 资源**

1. 选择**创建资源**。

1. 将**代理资源**保持为关闭状态。

1. 将**资源路径**保持为 `/`。

1. 对于**资源名称**，输入 **pets**。

1. 将 **CORS（跨源资源共享）**保持为关闭状态。

1. 选择**创建资源**。

在此步骤中，您将在 **/pets** 资源上创建 `GET` 方法。该 `GET` 方法已与 `http://petstore-demo-endpoint.execute-api.com/petstore/pets` 网站集成。适用于 API 方法的其他选项包括以下这些：
+ **POST**，主要用于创建子资源。
+ **PUT**，主要用于更新现有资源（也可用于创建子资源，但我们不建议这样做）。
+ **DELETE**，用于删除资源。
+ **PATCH**，用于更新资源。
+ **HEAD**，主要用在测试场景中。它与 GET 相同，但不能返回资源表示。
+ **OPTIONS**，可供调用方用于获取目标服务的可用通信选项相关信息。

 对于集成请求的 **HTTP 方法**，您必须选择一种受后端支持的方法。对于 `HTTP` 或 `Mock integration`，方法请求和集成请求可以使用相同的 HTTP 动词。对于其他集成类型，方法请求与集成请求可能会使用不同的 HTTP 动词。例如，要调用 Lambda 函数，集成请求必须使用 `POST` 调用该函数，而方法请求可能会根据 Lambda 函数的逻辑使用任何 HTTP 动词来进行调用。

**在 **/pets** 资源上创建 `GET` 方法**

1. 选择 **/pets** 资源。

1. 选择**创建方法**。

1. 对于**方法类型**，选择 **GET**。

1. 对于**集成类型**，选择 **HTTP 集成**。

1. 将 **HTTP 代理集成**保持为关闭状态。

1. 对于 **HTTP 方法**，选择 **GET**。

1. 对于**端点 URL**，输入 **http://petstore-demo-endpoint.execute-api.com/petstore/pets**。

   PetStore 网站可让您在给定页面上按宠物类型（例如“Dog”或“Cat”）检索 `Pet` 项目的列表。

1. 对于**内容处理**，选择**传递**。

1. 选择 **URL 查询字符串参数**。

   PetStore 网站使用 `type` 和 `page` 查询字符串参数来接受输入。您可以将查询字符串参数添加到方法请求中，并将其映射到集成请求的相应查询字符串参数中。

1. 要添加查询字符串参数，请执行以下操作：

   1. 选择**添加查询字符串**。

   1. 对于**名称**，输入 **type**。

   1. 保持**必填**和**缓存**为已关闭状态。

   重复上述步骤，再创建一个命名为 **page** 查询字符串。

1. 选择**创建方法**。

客户端现在可以在提交请求时提供一个宠物类型和页码作为查询字符串参数。这些输入参数必须映射到集成的查询字符串参数中，以便将输入值转发到后端的 PetStore 网站。

**将输入参数映射到集成请求**

1. 在**集成请求**选项卡的**集成请求设置**下，选择**编辑**。

1. 选择 **URL 查询字符串参数**，然后执行以下操作：

   1. 选择**添加查询字符串参数**。

   1. 对于**名称**，请输入 **type**。

   1. 对于**映射自**，输入 **method.request.querystring.type**。

   1. 将**缓存**保持为关闭状态。

   1. 选择**添加查询字符串参数**。

   1. 对于**名称**，请输入 **page**。

   1. 对于**映射自**，输入 **method.request.querystring.page**。

   1. 将**缓存**保持为关闭状态。

1. 选择**保存**。

**测试 API**

1. 选择**测试**选项卡。您可能需要选择右箭头按钮，以显示该选项卡。

1. 对于**查询字符串**，输入 **type=Dog&page=2**。

1. 选择**测试**。

    结果类似于以下内容：

      
![\[GET on Pets 方法的调用测试结果\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/api-gateway-create-api-step-by-step-test-invoke-get-on-pets-result-new-console.png)

    测试成功后，我们可以部署 API 以使其公开可用。

1. 选择**部署 API**。

1. 对于**阶段**，选择**新建阶段**。

1. 对于**阶段名称**，输入 **Prod**。

1. （可选）对于**描述**，输入描述。

1. 选择**部署**。

1.  （可选）在**阶段详细信息**下，对于**调用 URL**，您可以选择复制图标以复制您 API 的调用 URL。您可以将此值与 [Postman](https://www.postman.com) 和 [cURL](https://curl.se/) 等工具结合使用来测试您的 API。

 如果您使用开发工具包创建客户端，您可以调用开发工具包公开的方法来对请求签名。有关具体实施方式，请参阅您选择的[AWS开发工具包](https://aws.amazon.com/developer/tools/)。

**注意**  
 如果您的 API 发生更改，您必须重新部署 API 以便让新特征或更新后的特征生效，然后才能再次调用请求 URL。

## （可选）映射请求参数
<a name="api-gateway-create-resources-and-methods-next-steps"></a>

### API Gateway API 的映射请求参数
<a name="getting-started-mappings"></a>

 本教程演示了如何对 API 的方法请求创建 `{petId}` 路径参数以指定一个项目 ID，将其映射到集成请求 URL 中的 `{id}` 路径参数，并将请求发送至 HTTP 端点。

**注意**  
 如果未正确输入字母的大小写，例如应该输入大写字母时输入了小写字母，则可能会在稍后的演练中导致错误。

#### 步骤 1：创建资源
<a name="getting-started-mappings-add-resources"></a>

在此步骤中，您将使用路径参数 \$1petId\$1 创建资源。

**创建 \$1petId\$1 资源**

1. 选择 **/pets** 资源，然后选择**创建资源**。

1. 将**代理资源**保持为关闭状态。

1. 对于**资源路径**，选择 **/pets/**。

1. 对于**资源名称**，输入 **\$1petId\$1**。

    在 `petId` 两边使用大括号 (`{ }`)，以便显示为 **/pets/\$1petId\$1**。

1. 将 **CORS（跨源资源共享）**保持为关闭状态。

1. 选择**创建资源**。

#### 步骤 2：创建和测试方法
<a name="getting-started-mappings-set-methods"></a>

 在此步骤中，您将使用 `{petId}` 路径参数创建 `GET` 方法。

**设置 GET 方法**

1. 选择 **/\$1petId\$1** 资源，然后选择**创建方法**。

1. 对于**方法类型**，选择 **GET**。

1. 对于**集成类型**，选择 **HTTP 集成**。

1. 将 **HTTP 代理集成**保持为关闭状态。

1. 对于 **HTTP 方法**，选择 **GET**。

1. 对于**端点 URL**，输入 **http://petstore-demo-endpoint.execute-api.com/petstore/pets/\$1id\$1**。

1. 对于**内容处理**，选择**传递**。

1. 将**默认超时**保持为开启状态。

1. 选择**创建方法**。

现在，将刚刚创建的 `{petId}` 路径参数映射到集成请求的 HTTP 端点 URL 中的 `{id}` 路径参数。HTTP 端点 URL 为 **http://petstore-demo-endpoint.execute-api.com/petstore/pets/\$1id\$1**。

**映射 `{petId}` 路径参数**

1. 在**集成请求**选项卡的**集成请求设置**下，选择**编辑**。

1. 选择 **URL 路径参数**。

1.  API Gateway 为名为 **petId** 的集成请求创建路径参数，但是，此路径参数对您设置为后端集成的 HTTP 端点 URL 无效。HTTP 端点使用 `{id}` 作为路径参数。对于**名称**，删除 **petId** 并输入 **id**。

   这可将方法请求路径参数 `petId` 映射到集成请求路径参数 `id`。

1. 选择**保存**。

现在测试该方法。

**测试 方法**

1. 选择**测试**选项卡。您可能需要选择右箭头按钮，以显示该选项卡。

1. 在 **petId** 的**路径**下，输入 **4**。

1. 选择 **Test (测试)**。

   如果成功，**响应正文**将显示以下内容：

   ```
   {
     "id": 4,
     "type": "bird",
     "price": 999.99
   }
   ```

#### 步骤 3：部署 API
<a name="getting-started-mappings-deploy"></a>

在此步骤中，您将部署 API，以便在 API Gateway 控制台外部对其进行调用。

**部署 API**

1. 选择**部署 API**。

1. 对于**阶段**，选择 **Prod**。

1. （可选）对于**描述**，输入描述。

1. 选择 **Deploy (部署)**。

#### 步骤 4：测试 API
<a name="getting-started-mappings-test"></a>

在此步骤中，您将转到 API Gateway 控制台外部，并使用您的 API 访问 HTTP 端点。

1. 在主导航窗格中，选择**阶段**。

1. 在**阶段详细信息**下，选择复制图标以复制您 API 的调用 URL。

   它应该如下所示：

   ```
   https://my-api-id.execute-api.region-id.amazonaws.com/prod
   ```

1. 将此 URL 输入到新浏览器标签页的地址框中并在提交请求前将 `/pets/4` 附加到该 URL。

1. 浏览器将返回以下内容：

   ```
   {
     "id": 4,
     "type": "bird",
     "price": 999.99
   }
   ```

#### 后续步骤
<a name="api-gateway-create-resources-and-methods-next-steps"></a>

您可以通过开启请求验证、转换数据或创建自定义网关响应来进一步自定义 API。

要探索更多自定义 API 的方法，请参阅以下教程：
+ 有关请求验证的更多信息，请参阅[在 API Gateway 中设置基本请求验证](api-gateway-request-validation-set-up.md)。
+ 有关如何转换请求和响应负载的信息，请参阅[教程：修改集成请求和响应以集成到 AWS 服务](set-up-data-transformations-in-api-gateway.md)。
+ 有关如何创建自定义网关响应的信息，请参阅[使用 API Gateway 控制台为 REST API 设置网关响应](set-up-gateway-response-using-the-console.md)。