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

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

请求验证

您可以配置 API Gateway,使其在继续集成请求之前对路由请求执行验证。如果验证失败,API Gateway 会在不调用您的后端的情况下使请求失败,向客户端发送 “错误的请求正文” 网关响应,并将验证结果发布到 CloudWatch 日志中。通过这种方式使用验证可减少对 API 后端的不必要调用。

模型选择表达式

您可以使用模型选择表达式来动态验证同一路由中的请求。如果您为代理集成或非代理集成提供模型选择表达式,则会发生模型验证。当未找到匹配模型时,您可能需要将 $default 模型定义为回退。如果没有匹配模型且未定义 $default,则验证将失败。选择表达式类似于 Route.ModelSelectionExpression,并计算为 Route.RequestModels 的键。

在为 WebSocket API 定义路由时,您可以选择指定模型选择表达式。将会求解此表达式以选择在收到请求时用于正文验证的模型。表达式的求值结果为路由的 requestmodels 中的条目之一。

模型采用 JSON 架构表示,描述了请求正文的数据结构。此选择表达式的性质能让您为特定路由,在运行时动态选择要用于对照进行验证的模型。有关如何创建模型的信息,请参阅了解数据模型

使用 API Gateway 控制台设置请求验证

以下示例向您展示了如何在路径上设置请求验证。

首先,创建模型,然后创建路线。接下来,在刚刚创建的路径上配置请求验证。最后,部署和测试您的 API。要完成本教程,您需要一个$request.body.action用作路径选择表达式的 WebSocket API 和用于新路径的集成端点。

还需要 wscat 以连接到 API。有关更多信息,请参阅使用 wscat 连接到 WebSocket API 并向其发送消息

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

  2. 选择一个 WebSocket API。

  3. 在主导航窗格中,选择模型

  4. 选择 创建模型

  5. 对于名称,请输入 emailModel

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

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

    { "$schema": "http://json-schema.org/draft-04/schema#", "type" : "object", "required" : [ "address"], "properties" : { "address": { "type": "string" } } }

    此模型要求请求中包含电子邮件地址。

  8. 选择保存

在此步骤中,您将为您的 WebSocket API 创建路由。

要创建路由
  1. 在主导航窗格中,选择 “路由”。

  2. 选择 Create route (创建路由)

  3. 对于 Route key(路由键),请输入 sendMessage

  4. 选择集成类型并指定集成端点。有关更多信息,请参阅 设置 WebSocket API 集成

  5. 选择 Create route (创建路由)

在此步骤中,您将为sendMessage路径设置请求验证。

设置请求验证
  1. 在 “路由请求” 选项卡的 “路由请求设置” 下,选择 “编辑”

  2. 模型选择表达式中,输入${request.body.messageType}

    API Gateway 使用该messageType属性来验证传入的请求。

  3. 选择添加请求模型

  4. 在 “模型密钥” 中,输入email

  5. 对于模特,请选择 Email Model。

    API Gateway 会email根据此模型将messageType属性设置为,验证传入的消息。

    注意

    如果 API Gateway 无法将模型选择表达式与模型密钥相匹配,则它会选择$default模型。如果没有$default模型,则验证失败。对于生产 API,我们建议您创建$default模型。

  6. 选择 ‬保存更改

在此步骤中,您将部署和测试您的 API。

部署和测试您的 API
  1. 选择部署 API

  2. 从下拉列表中选择所需的阶段,或输入新阶段的名称。

  3. 选择部署

  4. 在主导航窗格中,选择阶段

  5. 复制您的 API 的 WebSocket 网址。该 URL 应类似于 wss://abcdef123.execute-api.us-east-2.amazonaws.com/production

  6. 打开一个新终端并使用以下参数运行wscat命令。

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. 使用以下命令测试您的 API。

    {"action": "sendMessage", "messageType": "email"}
    {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}

    API Gateway 将使请求失败。

    使用下一个命令向您的 API 发送有效请求。

    {"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}