我在 AWS API 网关中使用以下端点创建了简单的 API:
POST /v1/users
在方法执行/方法请求中,我添加了请求模型:
此模型架构如下所示:
但是,当我使用 json body 向该端点发出请求时,{ "foo": "bar" }
它不会拒绝它并且我的 lambda 函数被执行......
那么,如果它不用于验证请求,为什么还有定义 JSON 模式的选项呢?
我在 AWS API 网关中使用以下端点创建了简单的 API:
POST /v1/users
在方法执行/方法请求中,我添加了请求模型:
此模型架构如下所示:
但是,当我使用 json body 向该端点发出请求时,{ "foo": "bar" }
它不会拒绝它并且我的 lambda 函数被执行......
那么,如果它不用于验证请求,为什么还有定义 JSON 模式的选项呢?
只是想自己解决这个问题,我看到你也是几个小时前才问这个的!
到目前为止,我发现的唯一参考是这里:
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-method-settings.html
对于非 GET 方法类型,展开请求模型,对于内容类型和模型名称,键入内容类型并选择将调用者提供的数据转换为预期格式的模型名称。
所以看起来它更多的是用于转换而不是验证——但它实际上是如何工作的并不是特别清楚。
更新
我刚刚注意到这个 HackerNews 线程:
https://news.ycombinator.com/item?id=9880683
一位 AWS 工程师在那里回应,并说:
验证不需要模型。它们仅用于在客户端 SDK 中生成对象。
此功能已于 2017 年 4 月 11 日发布。请参阅https://aws.amazon.com/blogs/compute/how-to-remove-boilerplate-validation-logic-in-your-rest-apis-with-amazon-api-gateway-request-validation/
无论如何,从安全的角度来看,API 网关的输入/模型验证仅应被视为额外的防御层。
您的服务必须始终验证输入/模型,这不是您可以委托的!