在定义 APIG http 事件时,代码现在强制为application/json
和application/x-www-form-urlencoded
创建映射。 虽然您可以覆盖模板,但无法排除这些映射(即,我只想允许端点上的 json 请求)
此更改最近通过此提交引入lib/plugins/aws/deploy/compile/events/apiGateway/lib/methods.js :
const integrationRequestTemplates = {
'application/json': DEFAULT_JSON_REQUEST_TEMPLATE,
'application/x-www-form-urlencoded': DEFAULT_FORM_URL_ENCODED_REQUEST_TEMPLATE,
};
虽然我认为拥有这 2 个选项(和预定义模板)非常有用,但我认为最好允许用户选择性地仅包含他们想要的模板。
类似以下的内容可能有意义:
functions:
create:
handler: posts.create
events:
- http:
method: get
path: whatever
request:
template:
text/xhtml: { "stage" : "$context.stage" } # add additional template
application/json: { "httpMethod" : "$context.httpMethod" } # add mapping and override default template
application/x-www-form-urlencoded: true # add mapping and use default template
由于当前围绕 APIG 传递行为的未解决问题 (#1168) 以及解决该问题的未决 PR (#1992),能够将方法完全限制为所需的内容类型变得更加重要。
我绝对喜欢该功能能够真正锁定默认模板的想法,但恕我直言,它必须适用于整个服务。
我的假设是,如果您想完全锁定默认模板,您需要在整个服务的每个方法中执行此操作。 所以我想我更喜欢类似的东西
provider:
apigateway:
default-request-templates: false
否则,您将不得不疯狂地复制配置(例如,当您想为多个功能设置单独的模板时,这已经是必需的,但恕我直言,问题就少了,因为您只需要对具有请求数据的事件进行此操作。
但我还不确定:D。 @ serverless /vip@HyperBrain ?
现在这应该是可能的: https: //serverless.com/framework/docs/providers/aws/events/apigateway#custom -request-templates
@flomotlik自定义模板如何解决 OP 用例,即简单地选择退出默认的application/x-www-form-urlencoded
模板,而无需为application/json
创建自定义模板?
最有用的评论
我绝对喜欢该功能能够真正锁定默认模板的想法,但恕我直言,它必须适用于整个服务。
我的假设是,如果您想完全锁定默认模板,您需要在整个服务的每个方法中执行此操作。 所以我想我更喜欢类似的东西
否则,您将不得不疯狂地复制配置(例如,当您想为多个功能设置单独的模板时,这已经是必需的,但恕我直言,问题就少了,因为您只需要对具有请求数据的事件进行此操作。
但我还不确定:D。 @ serverless /vip@HyperBrain ?