API Gateway 中的简单计算器 API - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

API Gateway 中的简单计算器 API

我们的简单计算器 API 公开了三种方法(GET、POST、GET)来调用 简单的计算器 Lambda 函数。此 API 的图形表示如下:

这三种方法显示为后端 Lambda 函数提供输入来执行相同操作的不同方式:

  • GET /?a=...&b=...&op=... 方法使用查询参数来指定输入。

  • POST / 方法使用 JSON 负载 {"a":"Number", "b":"Number", "op":"string"} 来指定输入。

  • GET /{a}/{b}/{op} 方法使用路径参数来指定输入。

如果未定义,API Gateway 通过将 HTTP 方法和路径部分组合起来,生成对应的开发工具包方法名称。根路径部分 (/) 称为 Api Root。例如,API 方法 GET /?a=...&b=...&op=... 的默认 Java 开发工具包方法名称为 getABOpPOST / 的默认开发工具包方法名称为 postApiRootGET /{a}/{b}/{op} 的默认开发工具包方法名称为 getABOp。单独的开发工具包可以自定义约定。对于开发工具包特定的方法名称,请参考生成的开发工具包源中的文档。

您可以并且应该通过在各个 API 方法上指定 operationName 属性来覆盖默认开发工具包方法名称。您可在使用 API Gateway REST API 创建 API 方法更新 API 方法时这样做。在 API Swagger 定义中,您可以设置 operationId 以实现相同结果。

在演示如何使用 API Gateway 为该 API 生成的开发工具包来调用这些方法之前,我们先简单回想一下如何对其进行设置。有关详细说明,请参阅在 Amazon API Gateway 中创建 REST API。如果您是 API Gateway 的新用户,请先参阅使用 Lambda 集成构建 API Gateway REST API

创建用于输入和输出的模型

为了在 SDK 中指定强类型输入,我们为该 API 创建了一个 Input 模型。为了描述响应正文数据类型,我们创建了一个 Output 模型和一个 Result 模型。

创建用于输入、输出和结果的模型
  1. 在主导航窗格中,选择模型

  2. 选择 Create model (创建模型)

  3. 对于名称,请输入 input

  4. 对于内容类型,输入 application/json

    如果未找到匹配的内容类型,则不执行请求验证。要使用同一模型而不考虑内容类型,请输入 $default

  5. 对于模型架构,输入以下模型:

    { "$schema" : "$schema": "http://json-schema.org/draft-04/schema#", "type":"object", "properties":{ "a":{"type":"number"}, "b":{"type":"number"}, "op":{"type":"string"} }, "title":"Input" }
  6. 选择 Create model (创建模型)

  7. 重复以下步骤以创建 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/方法查询参数

对于 GET /?a=..&b=..&op=.. 方法,查询参数在 Method Request (方法请求) 中声明:

设置 GET / URL 查询字符串参数
  1. 方法请求部分,为根 (/) 资源上的 GET 方法选择编辑

  2. 选择 URL 查询字符串参数并执行以下操作:

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

    2. 对于名称,请输入 a

    3. 保持必填缓存为已关闭状态。

    4. 缓存保持为关闭状态。

    重复相同的步骤,创建一个名为 b 的查询字符串和一个名为 op 的查询字符串。

  3. 选择 Save(保存)。

将负载的数据模型设置为后端的输入

对于 POST / 方法,我们创建了 Input 模型,并将其添加到方法请求中以定义输入数据的形状。

将负载的数据模型设置为后端的输入
  1. 方法请求部分,为根 (/) 资源上的 POST 方法选择编辑

  2. 选择请求正文

  3. 选择 Add model (添加模型)

  4. 对于内容类型,输入 application/json

  5. 对于模型,选择输入

  6. 选择 Save(保存)。

使用此模型,您的 API 客户可以通过实例化 Input 对象来调用开发工具包以指定输入。若不使用此模型,您的客户将需要创建词典对象来表示 Lambda 函数的 JSON 输入。

为后端的结果输出设置数据模型

对于所有三种方法,我们将创建 Result 模型并将其添加到方法的 Method Response 中,以定义 Lambda 函数返回的输出的形状。

为后端的结果输出设置数据模型
  1. 选择 /{a}/{b}/{op} 资源,然后选择 GET 方法。

  2. 方法响应选项卡的响应 200 下,选择编辑

  3. 响应正文下,选择添加模型

  4. 对于内容类型,输入 application/json

  5. 对于模型,选择结果

  6. 选择 Save(保存)。

使用此模型,您的 API 客户可以通过读取 Result 对象的属性来解析成功的输出。若不使用此模型,您的客户将需要创建词典对象来表示 JSON 输出。