配置无服务器以处理所需的路径参数

Configuring Serverless to handle required path parameters

我是无服务器新手,正在编写我的第一个服务。它是为 AWS API 网关和 node.js lambda 函数构建的。将此视为我的 serverless.yaml 文件:

service: applicationCatalog
frameworkVersion: '2'
provider:
  name: aws
  runtime: nodejs12.x
functions:
  listShirts:
    handler: handler.listShirts
    events:
    - httpApi: GET /
  createShirt:
    handler: handler.createShirt
    events:
    - httpApi: POST /
  getShirt:
    handler: handler.getShirt
    events:
    - httpApi:
        method: GET
        path: "/{shirtId}"
        request:
          parameters:
            paths:
              shirtId: true
  deleteShirt:
    handler: handler.deleteShirt
    events:
    - httpApi:
        method: DELETE
        path: "/{shirtId}"
        request:
          parameters:
            paths:
              shirtId: true
resources: {}

函数 listShirts、createShirt 和 getShirt 都按我的预期工作,并且在传递 ShirtId 时 deleteShirt 也工作。问题是我在删除时没有传递 ShirtId。假设我的服务 url 是“https://shirts.mywardrobeapi.com”。我期待这个请求:

DELETE https://shirts.mywardrobeapi.com

触发 API 网关的错误响应。而是调用 deleteShirt 函数。当然,我可以在函数内部处理这个简单的检查,但我认为这就是 serverless.yaml 文件中的 { "shirtId" : true } 设置的目的。如何让此设置根据需要处理 shirtId 并且在未提供时不调用该函数?如果我不能,这个设置的目的是什么?

我建议使用 Middy and validator middleware 来处理所需的参数。 是的,缺点是你的 lambda 总是被触发。而且你还获得

  • 在代码中保持处理所需参数的灵活性
  • 如果参数错误,清除日志记录
  • 您还可以验证 外发响应
  • 让你serverless.yaml更干净

我们更喜欢中间而不是网关的精确配置API。