Serverless: APIG 事件现在强制使用 json 和 form-urlencoded 模板

创建于 2016-09-01  ·  3评论  ·  资料来源: serverless/serverless

这是一个功能提案

描述

在定义 APIG http 事件时,代码现在强制为application/jsonapplication/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

所有3条评论

我绝对喜欢该功能能够真正锁定默认模板的想法,但恕我直言,它必须适用于整个服务。

我的假设是,如果您想完全锁定默认模板,您需要在整个服务的每个方法中执行此操作。 所以我想我更喜欢类似的东西

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创建自定义模板?

此页面是否有帮助?
0 / 5 - 0 等级