如何在无服务器 Lambda 中声明可选的 get 参数?

koa*_*aok 3 lambda http serverless

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

这是我的功能

职能:

 MyFunc:

    handler: handler.myFunc

    events:

      - http:

          path: /getdata/{my_id}

          method: get

          request:

            parameters:

              paths:

                my_id: true
Run Code Online (Sandbox Code Playgroud)

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

          path: /getdata/{?my_id}
Run Code Online (Sandbox Code Playgroud)

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

 Resource's path part only allow a-zA-Z0-9._- and curly braces at the beginning and the end.
Run Code Online (Sandbox Code Playgroud)

我也想知道是否改变:

 my_id: false
Run Code Online (Sandbox Code Playgroud)

会是我的情况(但事实并非如此)

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

http://.../getdata
http://.../getdata/12345
Run Code Online (Sandbox Code Playgroud)

将由 MyFunc 管理?

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

谢谢

dud*_*dko 7

定义两个事件。

MyFunc:
  handler: handler.myFunc
  events:
    - http:
        path: /getdata/
        method: GET
    - http:
        path: /getdata/{id}
        method: GET
Run Code Online (Sandbox Code Playgroud)

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

更新:

拥有

request:
  parameters:
    paths:
      id: false
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为它只适用于查询字符串。据我所知,API Gateway 不支持可选的路径参数,只支持可选的查询字符串参数。[文档](https://serverless.com/framework/docs/providers/aws/events/apigateway#request-parameters) 对此并不十分清楚。:) (2认同)