【问题标题】:How to declare an optional get parameter in Serverless Lambda?如何在无服务器 Lambda 中声明可选的 get 参数?
【发布时间】:2018-10-17 16:15:21
【问题描述】:

我想了解是否有在无服务器中定义可选路径参数的快速语法(部署在 AWS lambda 上)。

这是我的功能中的内容

功能:

 MyFunc:

    handler: handler.myFunc

    events:

      - http:

          path: /getdata/{my_id}

          method: get

          request:

            parameters:

              paths:

                my_id: true

我在互联网上发现了一个定义可选参数的技巧,例如:

          path: /getdata/{?my_id}

但它不适用于无服务器。 我在部署时收到了这个错误:

 Resource's path part only allow a-zA-Z0-9._- and curly braces at the beginning and the end.

我也想知道是否改变:

 my_id: false

会是我的情况(但不是)

什么是无服务器方式让 my_id 可选所以两个 http 调用:

http://.../getdata
http://.../getdata/12345

将由 MyFunc 管理?

希望有一个更清洁的解决方案,因为需要创建两个不同的端点/func/lambda

谢谢

【问题讨论】:

    标签: http lambda serverless


    【解决方案1】:

    定义两个事件。

    MyFunc:
      handler: handler.myFunc
      events:
        - http:
            path: /getdata/
            method: GET
        - http:
            path: /getdata/{id}
            method: GET
    

    然后路径变量 id 将与 API 网关一起使用。在您的 lambda 代码中检查 event.pathParameters.id。请小心,因为如果没有提供id,则不必定义event.pathParameters

    更新:

    拥有

    request:
      parameters:
        paths:
          id: false
    

    在无服务器 yaml 中对生成的 CloudFormation 模板没有任何影响。您可以使用sls package -p /package/dir自行检查。

    【讨论】:

    • 谢谢,是的,这是有效的......即使它不是那么干净......顺便说一句,你知道 my_id: true 中“true”的目的是什么吗?
    • 我认为它只适用于查询字符串。据我所知,API Gateway 不支持可选的路径参数,只支持可选的查询字符串参数。 Documentation 对此并不十分清楚。 :)
    猜你喜欢
    • 2020-11-09
    • 2021-08-03
    • 1970-01-01
    • 2020-09-04
    • 2012-09-29
    • 1970-01-01
    • 2015-10-03
    • 2017-12-01
    • 2020-09-20
    相关资源
    最近更新 更多