教程:使用 HTTP 非代理集成构建 REST API - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

教程:使用 HTTP 非代理集成构建 REST API

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

使用 HTTP 自定义集成创建 API

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

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

  2. 如果您是第一次使用 API Gateway,您会看到一个介绍服务功能的页面。在 REST API 下,选择 Build (生成)。当 Create Example API (创建示例 API) 弹出框出现时,选择 OK (确定)

    如果这不是您首次使用 API Gateway,请选择创建 API。在 REST API 下,选择 Build (生成)

    1. 选择 New API (新 API)

    2. API Name (API 名称) 中输入名称。

    3. 还可选择在 Description (描述) 中添加简短描述。

    4. 选择 Create API (创建 API)

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

  3. 要创建 /pets 资源,请依次选择根资源、Actions (操作)Create Resource (创建资源)

    Resource Name (资源名称) 中键入 Pets,将 Resource Path (资源路径) 值保留为给定值,选择 Enable API Gateway CORS (启用 API 网关 CORS),然后选择 Create Resource (创建资源)

  4. 要在 /pets 资源上公开 GET 方法,请选择 Actions (操作),然后选择 Create Method (创建方法)

    /pets 资源节点下的列表中选择 GET,然后选择勾选标记图标以便完成创建方法。

    注意

    适用于 API 方法的其他选项包括:

    • POST,主要用于创建子资源。

    • PUT,主要用于更新现有资源(也可用于创建子资源,但我们不建议这样做)。

    • DELETE,用于删除资源。

    • PATCH,用于更新资源。

    • HEAD,主要用在测试场景中。它与 GET 相同,但不能返回资源表示。

    • OPTIONS,可供调用方用于获取目标服务的可用通信选项相关信息。

    创建的方法尚未与后端集成。集成在下一步进行。

  5. 在方法的 Setup (设置) 窗格中,为 Integration type (集成类型) 选择 HTTP,从 HTTP method (HTTP 方法) 下拉列表中选择 GET,键入 http://petstore-demo-endpoint.execute-api.com/petstore/pets 作为 Endpoint URL (终端节点 URL) 值,保留所有其他默认设置,然后选择 Save (保存)

    注意

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

    当方法设置完成后,您会看到 Method Execution (方法执行) 窗格,从中您可以进一步配置方法请求,以便添加查询字符串或自定义标头参数。您还可以更新集成请求,将来自方法请求的输入数据与后端所需的格式对应。

    PetStore 网站让您可以在给定页面上按宠物类型检索一系列 Pet 项目 (例如“Dog”或“Cat”)。它使用 typepage 查询字符串参数来接受此类输入。因此,我们必须将查询字符串参数添加到方法请求中,并将其映射到集成请求的相应查询字符串中。

  6. 在 GET 方法的 Method Execution (方法执行) 窗格中,选择 Method Request (方法请求),为 Authorization (授权) 选择 AWS_IAM,展开 URL Query String Parameters (URL 查询字符串参数) 部分,然后选择 Add query string (添加查询字符串) 以创建两个名为 typepage 的查询字符串。在添加每个查询字符串参数时,选中复选标记图标以保存它们。

    客户端现在可以在提交请求时提供一个宠物类型和页码作为查询字符串参数。这些输入参数必须映射到集成的查询字符串参数中,以便将输入值转发到后端的 PetStore 网站。该方法使用 AWS_IAM,因此您必须对请求签名才能调用方法。

  7. 从方法的 Integration Request (集成请求) 页面,展开 URL Query String Parameters (URL 查询字符串参数) 部分。默认情况下,这些方法请求查询字符串参数映射到名称相同的集成请求查询字符串参数。我们的演示 API 使用此默认映射。我们会将其按原样保留。要将不同的方法请求参数映射到相应的集成请求参数中,请选择参数对应的铅笔图标来编辑映射表达式,如 Mapped from (映射自) 列中所示。要将方法请求映射到不同的集成请求参数,请首先选择删除图标以删除现有的集成请求参数,然后选择 Add query string (添加查询字符串) 以便指定新名称和所需的方法请求参数映射表达式。

    简单的演示 API 现在构建完成。接下来应该测试 API。

  8. 要使用 API Gateway 控制台测试 API,请在 GET /pets 方法的方法执行窗格上选择测试。在 Method Test (方法测试) 窗格中,在 type (类型)page (页面) 查询字符串中分别输入 Dog2,然后选择 Test (测试)

    结果如下所示。(您可能需要向下滚动才能看到测试结果。)

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

  9. 要部署 API,请选择 API,然后从 Actions (操作) 下拉菜单中选择 Deploy API (部署 API)

    Deploy API (部署 API) 对话框中,选择一个阶段(或针对 API 的第一次部署 [New Stage]);在 Stage name (阶段名称) 输入字段中输入一个名称(例如“test”、“prod”、“dev”等);(可选)在 Stage description (阶段描述) 和/或 Deployment description (部署描述) 中提供一个描述;然后选择 Deploy (部署)

    部署后,您就可以获取 API 终端节点的调用 URL(Invoke URL (调用 URL))。

    如果 GET 方法支持开放访问(即,如果该方法的授权类型设置为 NONE),那么您可以双击 Invoke URL (调用 URL) 链接以在您的默认浏览器中调用该方法。如果需要,您还可以将必要的查询字符串参数附加到调用 URL。使用此处所述的 AWS_IAM 授权类型时,您必须使用 Amazon 凭证对请求签名。要执行这一操作,您必须使用支持签名版本 4 (SigV4) 协议的客户端。使用 Amazon 开发工具包或者 Postman 应用程序或 cURL 命令之一的应用程序就属于此类客户端。

    如果您使用开发工具包创建客户端,您可以调用开发工具包公开的方法来对请求签名。有关具体实施方式,请参阅您选择的Amazon开发工具包

    注意

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

API Gateway API 的映射请求参数

在本演练中,我们将介绍如何将方法请求参数映射到 API Gateway API 的相应集成请求参数。我们使用 HTTP 自定义集成创建示例 API 并使用它来演示如何使用 API Gateway 将方法请求参数映射到相应集成请求参数。然后,我们将访问以下可公开访问的 HTTP 终端节点:

http://petstore-demo-endpoint.execute-api.com/petstore/pets

如果复制上述 URL,将其粘贴到 Web 浏览器的地址栏中并按 EnterReturn,则会获得以下 JSON 格式的响应正文:

[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

前述终端节点可以使用两个查询参数:typepage。例如,将 URL 更改为以下形式:

http://petstore-demo-endpoint.execute-api.com/petstore/pets?type=cat&page=2

您将收到以下 JSON 格式的响应负载,第 2 页仅显示 cat (猫):

[ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]

此终端节点还支持使用项目 ID,如 URL 路径参数所示。例如,浏览到以下位置:

http://petstore-demo-endpoint.execute-api.com/petstore/pets/1

将显示关于 ID 为 1 的项目的以下 JSON 格式信息:

{ "id": 1, "type": "dog", "price": 249.99 }

除了支持 GET 操作外,此终端节点还处理具有负载的 POST 请求。例如,使用 Postman 将 POST 方法请求发送至以下位置:

http://petstore-demo-endpoint.execute-api.com/petstore/pets

包括标头 Content-type: application/json 和以下请求正文:

{ "type": "dog", "price": 249.99 }

您将在响应正文中收到以下 JSON 对象:

{ "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

我们现在通过使用此 PetStore 网站的 HTTP 自定义集成来构建 API Gateway API,从而公开这些内容和其他功能。任务包括以下这些:

  • 使用充当 HTTP 终端节点 https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets 的代理的 http://petstore-demo-endpoint.execute-api.com/petstore/pets 资源创建 API。

  • 启用 API 以接受两个方法请求查询参数 petTypepetsPage,将它们分别映射到集成请求的 typepage 查询参数,并将请求传递到 HTTP 终端节点。

  • 支持 API 方法请求 URL 上的 {petId} 路径参数指定一个项目 ID,将其映射到集成请求 URL 中的 {id} 路径参数,并将请求发送至 HTTP 终端节点。

  • 支持方法请求接受后端网站所定义格式的 JSON 负载,并通过集成请求将负载不加修改地传递到后端 HTTP 终端节点。

注意

请注意本演练的步骤中使用的大小写。在要求大写字母时键入小写字母 (或相反情况) 可能会在稍后的演练中导致错误。

先决条件

在开始本演练之前,您应执行以下操作:

  1. 完成 开始使用 API Gateway 的先决条件 中的步骤。

  2. 至少应按照 教程:使用 HTTP 非代理集成构建 REST API 中的步骤操作,在 API Gateway 控制台中创建名为 MyDemoAPI 的新 API。

步骤 1:创建资源

在此步骤中,您将创建三个支持 API 与 HTTP 终端节点交互的资源。

创建第一个资源
  1. Resources(资源)窗格中,选择由一个正斜杠 (/) 表示的资源根,然后从 Actions(操作)下拉菜单中选择 Create Resource(创建资源)。

  2. 对于资源名称,键入 petstorewalkthrough

  3. 对于资源路径,接受默认值 /petstorewalkthrough,然后选择创建资源

创建第二个资源
  1. 资源窗格中,选择 /petstorewalkthrough,然后选择创建资源

  2. 对于资源名称,键入 pets

  3. 对于资源路径,接受默认值 /petstorewalkthrough/pets,然后选择创建资源

创建第三个资源
  1. 资源窗格中,选择 /petstorewalkthrough/pets,然后选择创建资源

  2. 对于资源名称,键入 petId。这将映射到 HTTP 终端节点中的项目 ID。

  3. 对于资源路径,使用 {petId} 覆盖 petid。在 { } 两边使用大括号 (petId) 以确保显示 /petstorewalkthrough/pets/{petId},然后选择创建资源

    这将映射到 HTTP 终端节点中的 /petstore/pets/my-item-id

步骤 2:创建和测试方法

在此步骤中,您将方法与后端 HTTP 终端节点集成,将 GET 方法请求参数映射到相应的集成请求参数,然后测试这些方法。

设置和测试第一个 GET 方法

此过程演示了以下步骤:

  • 创建方法请求 GET /petstorewalkthrough/pets,并将其与集成请求 GET http://petstore-demo-endpoint.execute-api.com/petstore/pets 进行集成。

  • 将方法请求查询参数 petTypepetsPage 分别映射到集成请求查询字符串参数 typepage

  1. Resources(资源)窗格中,选择 /petstorewalkthrough/pets,从 Actions(操作)菜单中选择 Create Method(创建方法),然后从方法名称下拉列表的 /pets 下选择 GET

  2. /petstorewalkthrough/pets - GET - Setup 窗格中,为 Integration type (集成类型) 选择 HTTP,然后为 HTTP method (HTTP 方法) 选择 GET

  3. 对于终端节点 URL,键入http://petstore-demo-endpoint.execute-api.com/petstore/pets

  4. 选择 Save

  5. Method Execution (方法执行) 窗格中,选择 Method Request (方法请求),然后选择 URL Query String Parameters (URL 查询字符串参数) 旁的箭头。

  6. 选择 Add query string (添加查询字符串)

  7. 对于名称,键入 petType

    这可指定 API 方法请求中的 petType 查询参数。

  8. 选择复选标记图标以完成方法请求 URL 查询字符串参数的创建。

  9. 再次选择 Add query string (添加查询字符串)

  10. 对于名称,键入 petsPage

    这可指定 API 方法请求中的 petsPage 查询参数。

  11. 选择复选标记图标以完成方法请求 URL 查询字符串参数的创建。

  12. 选择 Method Execution (方法执行),再选择 Integration Request (集成请求),然后选择 URL Query String Parameters (URL 查询字符串参数) 旁的箭头。

  13. 删除从 petType 映射的 method.request.querystring.petType 条目,以及从 petsPage 映射的 method.request.querystring.petsPage 条目。您执行此步骤是因为终端节点需要请求 URL 的名为 typepage 的查询字符串参数,而不是默认值。

  14. 选择 Add query string (添加查询字符串)

  15. 对于名称,键入 type。这会创建集成请求 URL 所需的查询字符串参数。

  16. 对于映射自,键入 method.request.querystring.petType

    这可将方法请求的 petType 查询参数映射到集成请求的 type 查询参数。

  17. 选择复选标记图标以完成集成请求 URL 查询字符串参数的创建。

  18. 再次选择 Add query string (添加查询字符串)

  19. 对于名称,键入 page。这会创建集成请求 URL 所需的查询字符串参数。

  20. 对于映射自,键入 method.request.querystring.petsPage

    这可将方法请求的 petsPage 查询参数映射到集成请求的 page 查询参数。

  21. 选择复选标记图标以完成集成请求 URL 查询字符串参数的创建。

  22. 选择 Method Execution (方法执行)。在 Client (客户端) 框中,选择 TEST。在 Query Strings (查询字符串) 区域中,对于 petType,键入 cat。对于 petsPage,键入2

  23. 选择 Test (测试)。如果成功,Response Body (响应正文) 将显示以下内容:

    [ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]
设置和测试第二个 GET 方法

此过程演示了以下步骤:

  • 创建方法请求 GET /petstorewalkthrough/pets/{petId},并将其与集成请求 GET http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id} 进行集成。

  • 将方法请求路径参数 petId 映射到集成请求路径参数 id

  1. Resources(资源)列表中选择 /petstorewalkthrough/pets/{petId},从 Actions(操作)下拉菜单中选择 Create Method(创建方法),然后选择 GET 作为方法的 HTTP 动词。

  2. 设置窗格中,为 Integration type (集成类型) 选择 HTTP,并为 HTTP method (HTTP 方法) 选择 GET

  3. 对于终端节点 URL,键入http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}

  4. 选择 Save

  5. Method Execution (方法执行) 窗格中,选择 Integration Request (集成请求),然后选择 URL Path Parameters (URL 路径参数) 旁的箭头。

  6. 选择 Add path (添加路径)

  7. 对于名称,键入 id

  8. 对于映射自,键入 method.request.path.petId

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

  9. 选择复选标记图标以完成 URL 路径参数的创建。

  10. 选择 Method Execution (方法执行),然后在 Client (客户端) 框中,选择 TEST。在路径区域中,对于 petId,键入 1

  11. 选择 Test (测试)。如果成功,Response Body (响应正文) 将显示以下内容:

    { "id": 1, "type": "dog", "price": 249.99 }
设置和测试 POST 方法

此过程演示了以下步骤:

  • 创建方法请求 POST /petstorewalkthrough/pets,并将其与集成请求 POST http://petstore-demo-endpoint.execute-api.com/petstore/pets 进行集成。

  • 将方法请求 JSON 负载传递至集成请求负载,而不作修改。

  1. Resources(资源)窗格中选择 /petstorewalkthrough/pets,从 Actions(操作)下拉菜单中选择 Create Method(创建方法),然后选择 POST 作为方法的 HTTP 动词。

  2. 设置窗格中,为 Integration type (集成类型) 选择 HTTP,并为 HTTP method (HTTP 方法) 选择 POST

  3. 对于终端节点 URL,键入http://petstore-demo-endpoint.execute-api.com/petstore/pets

  4. 选择 Save

  5. Method Execution (方法执行) 窗格中的 Client (客户端) 框中,选择 TEST。展开 Request Body (请求正文),然后键入以下内容:

    { "type": "dog", "price": 249.99 }
  6. 选择 Test (测试)。如果成功,Response Body (响应正文) 将显示以下内容:

    { "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

步骤 3:部署 API

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

部署 API
  1. 资源窗格中,选择 Deploy API (部署 API)

  2. 对于部署阶段,请选择 test

    注意

    输入必须是 UTF-8 编码 (即未本地化) 的文本。

  3. 对于 Deployment description (部署描述),键入 Calling HTTP endpoint walkthrough

  4. 选择 Deploy (部署)

步骤 4:测试 API

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

  1. Stage Editor (阶段编辑器) 窗格的 Invoke URL (调用 URL) 旁边,将 URL 复制到剪贴板。它应该如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test
  2. 将此 URL 粘贴到新浏览器标签页的地址框中。

  3. 附加 /petstorewalkthrough/pets,使之如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    浏览到该 URL。此时应显示以下信息:

    [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
  4. petstorewalkthrough/pets 之后,键入 ?petType=cat&petsPage=2,使之如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets?petType=cat&petsPage=2
  5. 浏览到该 URL。此时应显示以下信息:

    [ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]
  6. petstorewalkthrough/pets 之后,用 ?petType=cat&petsPage=2 替换 /1,使之如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets/1
  7. 浏览到该 URL。此时应显示以下信息:

    { "id": 1, "type": "dog", "price": 249.99 }
  8. 使用 Web 调试代理工具或 cURL 命令行工具将 POST 方法请求发送至上一过程中的 URL。附加 /petstorewalkthrough/pets,使之如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    附加以下标头:

    Content-Type: application/json

    将以下代码添加到请求正文:

    { "type": "dog", "price": 249.99 }

    例如,如果您使用 cURL 命令行工具,请运行类似以下内容的命令:

    curl -H "Content-Type: application/json" -X POST -d "{\"type\": \"dog\",\"price\": 249.99}" https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    响应正文中应返回以下信息:

    { "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

本演练到此结束。

映射响应负载

在本次演练中,我们将演示如何在 API Gateway 中使用模型和映射模板,以将 API 调用的输出从一个数据架构转换为另一个数据架构。本演练以开始使用 API GatewayAPI Gateway API 的映射请求参数中的说明和概念为基础。如果您尚未完成这些演练,我们建议首先将它们完成。

本演练将使用 API Gateway 从可公开访问的 HTTP 终端节点和您将创建的 Amazon Lambda 函数获取示例数据。HTTP 终端节点和 Lambda 函数会返回相同的示例数据:

[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

您将使用模型和映射模板将此数据转换为一个或多个输出格式。在 API Gateway 中,模型定义某些数据的格式(又称为架构或形状)。在 API Gateway 中,使用映射模板将一些数据从一种格式转换为另一种格式。有关更多信息,请参阅 使用模型和映射模板

第一个模型和映射模板用于将 id 重命名为 number,将 type 重命名为 class,以及将 price 重命名为 salesPrice,如下所示:

[ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]

第二个模型和映射模板用于将 idtype 合并到 description 中,并将 price 重命名为 askingPrice,如下所示:

[ { "description": "Item 1 is a dog.", "askingPrice": 249.99 }, { "description": "Item 2 is a cat.", "askingPrice": 124.99 }, { "description": "Item 3 is a fish.", "askingPrice": 0.99 } ]

第三个模型和映射模板用于将 idtypeprice 合并成一组 listings,如下所示:

{ "listings": [ "Item 1 is a dog. The asking price is 249.99.", "Item 2 is a cat. The asking price is 124.99.", "Item 3 is a fish. The asking price is 0.99." ] }

步骤 1:创建 Lambda 函数

您首先需要创建一个 Lambda 函数, 为 Lambda 自定义集成返回示例数据。

创建 Lambda 函数:
  1. 打开 Amazon Lambda 控制台,地址:https://console.aws.amazon.com/lambda/

  2. 选择 Create function (创建函数)

  3. 选择 Author from scratch (从头开始创作)

  4. 对于 Function Name(函数名称),请键入 GetPetsInfo

  5. 选择 Create function(创建函数)。

  6. 复制以下 Lambda 函数,并将其粘贴到 Lambda 的代码编辑器中。选择 Deploy(部署)以更新您的函数。

    console.log('Loading event'); export const handler = function(event, context, callback) { callback(null, [{"id": 1, "type": "dog", "price": 249.99}, {"id": 2, "type": "cat", "price": 124.99}, {"id": 3, "type": "fish", "price": 0.99}]); // SUCCESS with message };
    提示

    上述代码在 Node.js 中编写,console.log 将信息写入 Amazon CloudWatch 日志。event 包含对 Lambda 函数的输入。context 包含调用上下文。callback 返回结果。有关如何编写 Lambda 函数代码的更多信息,请参阅Amazon Lambda:工作原理中的“编程模型”部分以及 Amazon Lambda 开发人员指南中的示例演练。

步骤 2:创建模型

在此步骤中,您将创建四个模型。前三个模型表示可与 HTTP 终端节点结合使用的数据输出格式。最后一个模型表示可与 Lambda 函数结合使用的数据输入架构。

创建第一个输出模型
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 如果显示了 MyDemoAPI,请选择模型

  3. 选择创建

  4. 对于模型名称,键入 PetsModelNoFlatten

  5. 对于 Content type (内容类型),键入 application/json

  6. 对于模型描述,键入 Changes id to number, type to class, and price to salesPrice

  7. 对于 Model schema (模型架构),键入以下与 JSON 架构兼容的定义:

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelNoFlatten", "type": "array", "items": { "type": "object", "properties": { "number": { "type": "integer" }, "class": { "type": "string" }, "salesPrice": { "type": "number" } } } }
  8. 选择 Create model (创建模型)

创建第二个输出模型
  1. 选择创建

  2. 对于模型名称,键入 PetsModelFlattenSome

  3. 对于 Content type (内容类型),键入 application/json

  4. 对于模型描述,键入 Combines id and type into description, and changes price to askingPrice

  5. 对于 Model schema (模型架构),键入以下内容:

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelFlattenSome", "type": "array", "items": { "type": "object", "properties": { "description": { "type": "string" }, "askingPrice": { "type": "number" } } } }
  6. 选择 Create model (创建模型)

创建第三个输出模型
  1. 选择创建

  2. 对于模型名称,键入 PetsModelFlattenAll

  3. 对于 Content type (内容类型),键入 application/json

  4. 对于模型描述,键入 Combines id, type, and price into a set of listings

  5. 对于 Model schema (模型架构),键入以下内容:

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelFlattenAll", "type": "object", "properties": { "listings": { "type": "array", "items": { "type": "string" } } } }
  6. 选择 Create model (创建模型)

创建输入模型
  1. 选择创建

  2. 对于模型名称,键入 PetsLambdaModel

  3. 对于 Content type (内容类型),键入 application/json

  4. 对于模型描述,键入 GetPetsInfo model

  5. 对于 Model schema (模型架构),键入以下内容:

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsLambdaModel", "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer" }, "type": { "type": "string" }, "price": { "type": "number" } } } }
  6. 选择 Create model (创建模型)

步骤 3:创建资源

在此步骤中,您将创建四个资源。借助前三个资源,您将能够以三种输出格式从 HTTP 终端节点获取示例数据。最后一个资源使您能够从 Lambda 函数中获得与 /flattensome 的输出模式相同的示例数据。

创建第一个资源
  1. 在链接列表中,选择资源

  2. 资源窗格中,选择 /petstorewalkthrough,然后选择创建资源

  3. 对于资源名称,键入 NoFlatten

  4. 对于资源路径,接受默认值 /petstorewalkthrough/noflatten,然后选择创建资源

创建第二个资源
  1. 资源窗格中,再次选择 /petstorewalkthrough,然后选择创建资源

  2. 对于资源名称,键入 FlattenSome

  3. 对于资源路径,接受默认值 /petstorewalkthrough/flattensome,然后选择创建资源

创建第三个资源
  1. 资源窗格中,再次选择 /petstorewalkthrough,然后选择创建资源

  2. 对于资源名称,键入 FlattenAll

  3. 对于资源路径,接受默认值 /petstorewalkthrough/flattenall,然后选择创建资源

创建第四个资源
  1. 资源窗格中,再次选择 /petstorewalkthrough,然后选择创建资源

  2. 对于资源名称,键入 LambdaFlattenSome

  3. 对于资源路径,接受默认值 /petstorewalkthrough/lambdaflattensome,然后选择 Create Resource (创建资源)

步骤 4:创建 GET 方法

在此步骤中,您将为在上一步中创建的每个资源创建一个 GET 方法。

创建第一个 GET 方法
  1. 资源列表中,选择 /petstorewalkthrough/flattenall,然后选择创建方法

  2. 从下拉列表中选择 GET,然后选择对勾图标以保存您的选择。

  3. 在“设置”窗格中,选择 HTTP 作为集成类型,选择 GET 作为 HTTP 方法,在 终端节点 URL 中键入 http://petstore-demo-endpoint.execute-api.com/petstore/pets,然后选择保存

创建第二个 GET 方法
  1. 资源列表中,选择 /petstorewalkthrough/lambdaflattensome,然后选择创建方法

  2. 从下拉列表中选择 GET,然后选择对勾图标以保存您的选择。

  3. 在“Setup”(设置)窗格中,对于 Integration type(集成类型),选择 Lambda Function(Lambda 函数)。

  4. 请勿选中 Use Lambda Proxy integration(使用 Lambda 代理集成)复选框。

  5. 为 Lambda 函数输入 GetPetsInfo

  6. 当系统提示向 Lambda 函数添加权限时,选择 OK (确定)

创建第三个 GET 方法
  1. 资源列表中,选择 /petstorewalkthrough/flattensome,然后选择创建方法

  2. 从下拉列表中选择 GET,然后选择对勾图标以保存您的选择。

  3. 在“设置”窗格中,选择 HTTP 作为集成类型,选择 GET 作为 HTTP 方法,在终端节点 URL 中键入 http://petstore-demo-endpoint.execute-api.com/petstore/pets,然后选择保存

创建第四个 GET 方法
  1. 资源列表中,选择 /petstorewalkthrough/noflatten,然后依次选择操作创建方法

  2. 从下拉列表中选择 GET,然后选择对勾图标以保存您的选择。

  3. 在“Setup”(设置)窗格中,选择 HTTP 作为 Integration type(集成类型),选择 GET 作为 HTTP method(HTTP 方法),在 Endpoint URL(终端节点 URL)中键入 http://petstore-demo-endpoint.execute-api.com/petstore/pets,然后选择 Save(保存)。

步骤 5:设置和测试方法

在此步骤中,您将配置方法响应、集成请求和集成响应,以指定与 HTTP 终端节点和 Lambda 函数关联的 GET 方法的输入和输出数据架构(或模型)。您还将学习使用 API Gateway 控制台来测试对这些方法的调用。

为第一个 GET 方法设置集成,然后对其进行测试
  1. 从 API 的资源树中,选择 /petstorewalkthrough/flattenall 节点下的 GET

  2. Method Execution (方法执行) 窗格中,选择 Method Response (方法响应),然后选择 200 旁边的箭头。

  3. Response Models for 200 (针对 200 的响应模型) 区域中,针对 application/json 选择铅笔图标以开始为方法输出设置模型。对于模型,选择 PetsModelFlattenAll,然后选择对勾标记图标以保存设置。

  4. 选择 Method Execution (方法执行),再选择 Integration Response (方法响应),然后选择 200 旁边的箭头。

  5. 展开 Mapping Templates(映射模板)部分,选择 Content-Type(内容类型)下的 application/json

  6. 对于从模型生成模板,选择 PetsModelFlattenAll 以显示 PetsModelFlattenAll 模型之后的映射模板作为起点。

  7. 按如下所示修改映射模板代码:

    #set($inputRoot = $input.path('$')) { "listings" : [ #foreach($elem in $inputRoot) "Item number $elem.id is a $elem.type. The asking price is $elem.price."#if($foreach.hasNext),#end #end ] }
  8. 选择 Save

  9. 选择 Method Execution (方法执行),在 Client (客户端) 框中选择 TEST,然后选择 Test (测试)。如果成功,Response Body (响应正文) 将显示以下内容:

    { "listings" : [ "Item number 1 is a dog. The asking price is 249.99.", "Item number 2 is a cat. The asking price is 124.99.", "Item number 3 is a fish. The asking price is 0.99." ] }
为第二个 GET 方法设置集成,然后对其进行测试
  1. 从 API 的资源树中,选择 /petstorewalkthrough/lambdaflattensome 节点下的 GET

  2. Method Execution (方法执行) 中,选择 Method Response (方法响应)。然后选择 200 旁边的箭头以展开该部分。

  3. Response Models for 200 (针对 200 的响应模型) 区域中,选择 application/json 内容类型一行中的铅笔图标。选择 PetsModelFlattenSome 作为模型,然后选择对勾标记图标以保存选择。

  4. 返回到 Method Execution (方法执行)。选择 Integration Response (集成响应),然后选择 200 旁边的箭头。

  5. Mapping Templates(映射模板)部分中,选择 Content-Type(内容类型)下的 application/json

  6. 对于生成模板,选择 PetsModelFlattenSome 以显示此方法输出的映射脚本模板。

  7. 按如下所示修改代码,然后选择保存

    #set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description" : "Item $elem.id is a $elem.type.", "askingPrice" : $elem.price }#if($foreach.hasNext),#end #end ]
  8. 选择 Method Execution (方法执行),在 Client (客户端) 框中选择 TEST,然后选择 Test (测试)。如果成功,Response Body (响应正文) 将显示以下内容:

    [ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]
为第三个 GET 方法设置集成,然后对其进行测试
  1. 从 API 的资源树中,选择 /petstorewalkthrough/flattensome 节点下的 GET

  2. Method Execution (方法执行) 窗格中,选择 Method Response (方法响应)

  3. 选择 200 旁边的箭头。

  4. Response Models for 200 (针对 200 的响应模型) 区域中,对于 application/json,选择铅笔图标。对于模型,选择 PetsModelFlattenSome,然后选择对勾标记图标以保存选择。

  5. 返回到 Method Execution (方法执行) 并选择 Integration Response (集成响应)

  6. 选择 200 旁边的箭头以展开该部分。

  7. 展开 Mapping Templates(映射模板)区域。对于内容类型,选择 application/json。对于生成模板,选择 PetsModelFlattenSome 以显示此方法输出的映射脚本模板。

  8. 按如下所示修改代码:

    #set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description": "Item $elem.id is a $elem.type.", "askingPrice": $elem.price }#if($foreach.hasNext),#end #end ]
  9. 选择 Save

  10. 返回到 Method Execution (方法执行) 并选择 Client (客户端) 框中的 TEST。然后选择 Test (测试)。如果成功,Response Body (响应正文) 将显示以下内容:

    [ { "description": "Item 1 is a dog.", "askingPrice": 249.99 }, { "description": "Item 2 is a cat.", "askingPrice": 124.99 }, { "description": "Item 3 is a fish.", "askingPrice": 0.99 } ]
为第四个 GET 方法设置集成,然后对其进行测试
  1. 从 API 的资源树中,选择 /petstorewalkthrough/noflatten 节点下的 GET

  2. Method Execution (方法执行) 窗格中,选择 Method Response (方法响应),然后展开 200 部分。

  3. Response Models for 200 (针对 200 的响应类型) 区域中,对于 application/json,选择铅笔图标以更新此方法的响应模型。

  4. 选择 PetsModelNoFlatten 作为 application/json 内容类型的模型,然后选择对勾标记图标以保存选择。

  5. 选择 Method Execution (方法执行),再选择 Integration Response (方法响应),然后选择 200 旁边的箭头以展开该部分。

  6. 展开 Mapping Templates (映射模板) 部分。对于内容类型,选择 application/json。对于生成模板,选择 PetsModelNoFlatten 以显示此方法输出的映射脚本模板。

  7. 按如下所示修改代码:

    #set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "number": $elem.id, "class": "$elem.type", "salesPrice": $elem.price }#if($foreach.hasNext),#end #end ]
  8. 选择 Save

  9. 返回到 Method Execution (方法执行),在 Client (客户端) 框中选择 TEST,然后选择 Test (测试)。如果成功,Response Body (响应正文) 将显示以下内容:

    [ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]

步骤 6:部署 API

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

部署 API
  1. 资源窗格中,选择 Deploy API (部署 API)

  2. 对于部署阶段,请选择 test

  3. 对于 Deployment description (部署描述),键入 Using models and mapping templates walkthrough

  4. 选择 Deploy (部署)

步骤 7:测试 API

在此步骤中,您将转到 API Gateway 控制台外部,与 HTTP 终端节点和 Lambda 函数进行交互。

  1. Stage Editor (阶段编辑器) 窗格的 Invoke URL (调用 URL) 旁边,将 URL 复制到剪贴板。它应该如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test
  2. 将此 URL 粘贴到新浏览器标签页的地址框中。

  3. 附加 /petstorewalkthrough/noflatten,使之如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/noflatten

    浏览到该 URL。此时应显示以下信息:

    [ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]
  4. petstorewalkthrough/ 后面的 noflatten 替换为 flattensome

  5. 浏览到该 URL。此时应显示以下信息:

    [ { "description": "Item 1 is a dog.", "askingPrice": 249.99 }, { "description": "Item 2 is a cat.", "askingPrice": 124.99 }, { "description": "Item 3 is a fish.", "askingPrice": 0.99 } ]
  6. petstorewalkthrough/ 后面的 flattensome 替换为 flattenall

  7. 浏览到该 URL。此时应显示以下信息:

    { "listings" : [ "Item number 1 is a dog. The asking price is 249.99.", "Item number 2 is a cat. The asking price is 124.99.", "Item number 3 is a fish. The asking price is 0.99." ] }
  8. petstorewalkthrough/ 后面的 flattenall 替换为 lambdaflattensome

  9. 浏览到该 URL。此时应显示以下信息:

    [ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]

步骤 8:清除

如果您不再需要为本演练创建的 Lambda 函数,现在可以将其删除。您也可以删除附带的 IAM 资源。

警告

如果您删除您的 API 所依赖的某个 Lambda 函数,这些 API 将不再有效。Lambda 函数删除操作无法撤消。如果您要再次使用 Lambda 函数,必须重新创建该函数。

如果您删除 Lambda 函数依赖的 IAM 资源,Lambda 函数及依赖于该函数的任何 API 将不再有效。IAM 资源删除操作无法撤消。如果您要再次使用 IAM 资源,必须重新创建该资源。如果您打算用为此演练及其他演练创建的资源继续试验,请不要删除 Lambda 调用角色或 Lambda 执行角色。

删除 Lambda 函数
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Lambda 控制台:https://console.aws.amazon.com/lambda/

  2. Lambda: 函数列表页面的函数列表中,选择 GetPetsInfo 旁边的按钮,然后依次选择操作删除。当系统提示时,再次选择删除

删除相关联的 IAM 资源
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 详细信息区域中,选择角色

  3. 选择 APIGatewayLambdaExecRole,然后依次选择角色操作删除角色。在系统提示时,选择 Yes, Delete

  4. 详细信息区域中,选择策略

  5. 选择 APIGatewayLambdaExecPolicy,然后选择策略操作删除。系统提示时,选择删除

现在,您已经完成了本演练。