使用无服务器框架为无效和不完整的端点创建响应?
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
但是很快就会有很多工作要做,因为我要完成其中三个以上的终点。我还需要在其中一些上包含 DELETE
和 PUT
。
我可以轻松地为无效或不完整的端点创建响应吗?
我的 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/
我有一系列涉及 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
但是很快就会有很多工作要做,因为我要完成其中三个以上的终点。我还需要在其中一些上包含 DELETE
和 PUT
。
我可以轻松地为无效或不完整的端点创建响应吗?
我的 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/