使用无服务器框架为无效和不完整的端点创建响应?

Create a response for invalid and incomplete end points using the Serverless Framework?

我有一系列涉及 lambda 函数的 HTTP 端点,这些函数会命中详细信息,如下所示:

products/1
users/1
package/998134

products/users/package/ 没有相应的端点。我在 users/{id}package/{id} 端点周围有一个自定义授权方。

如果用户使用 GET 进入 users/packages/,他们会收到 {"message":"Missing Authentication Token"}。如果他们使用 POST 到达这些端点(如果他们也传递 ID,则对我的端点来说是一个有效选项)他们会收到

{'message': "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=MYTOKENHERE"}

有没有办法调整这些消息?我的第一个想法是只创建相关的端点:

GET users/
POST users/
GET products/
POST products/
GET package/
POST package

但是很快就会有很多工作要做,因为我要完成其中三个以上的终点。我还需要在其中一些上包含 DELETEPUT

我可以轻松地为无效或不完整的端点创建响应吗?

我的 serverless.yml 目前有这样的定义:

show_user:
  handler: users/show_users.return_user
  events:
    - http:
        path: users/{id}
        method: get
        cors: true
update_user:
  handler: users/update_user.update_user
  events:
    - http:
        path: users/{id}
        method: post
        cors: true
        authorizer: ${self:custom.authorizer.users}

我最近需要做一些类似的事情。我用这样的配置做到了:

error_messages:
  handler: custom_errors/errors.invalid_path
  events:
    - http
        path: users/
        method: any
    - http
        path: product/
        method: any
    - http
        path: package/
        method: any

然后在指定位置创建处理程序并return您想要的结果。在这种情况下,处理程序将位于 custom_errors/errors.invalid_path

就我而言,我 return 发送了一个带有自定义消息的 HTTP 404,表明需要 {id}

method: any 行将捕获所有 HTTP 动词,因此您只需为每个要保护的端点添加三行,而不是为每个单独的 HTTP 动词添加一组。

我是这样使用 ApiGateway 的 {proxy+} catchall 功能完成的:

no-endpoint:
    description: catch all non-existent enpoints with 404 - must be 
last http
    handler: src/functions/api-controller.noEndpoint
    events:
      - http:
          path: /{proxy+}
          method: any
          cors: true

注意:此必须 是无服务器文件中的最后一个 http 端点,以便不会捕获其他有效端点。您可以在这里阅读更多相关信息:

https://aws.amazon.com/blogs/aws/api-gateway-update-new-features-simplify-api-development/