【发布时间】:2020-08-14 01:14:13
【问题描述】:
我的 Lambda 函数中有 class BadRequest(Exception): pass。
我想raise BadRequest("Invalid request params") 并让 API 返回一个状态码为 400 且正文为 { "message": "Invalid request params" }(或等效项)的响应。
只是这样做会返回状态码为 200(哦,不!)和正文的响应
{
"errorMessage": "Invalid request params",
"errorType": "BadRequest",
"stackTrace": <my application code that the user shouldnt see>
}
在网上搜索后,我似乎有3个选择:
1) chalice
2) 使用集成响应和方法响应将错误解析为更好的响应。我会像[BadRequest].* 一样进行正则表达式,并在我抛出异常时插入一个前缀(不是很优雅的IMO)。
3) 使用Step Functions 创建 API 的有状态表示。这似乎有点乏味,因为我需要学习 ASL,而且我不认识任何聋人。 -.-
我应该去哪个兔子洞,为什么?
【问题讨论】:
-
对圣杯和阶梯函数了解不多。我建议使用该 lambda 的集成响应和方法响应。它是构建 来处理此类问题的功能,我在任何地方都使用它来根据某些触发器格式化我的响应。走这条路的主要原因是 AWS 支持它为 AWS 服务解决这个问题。因此,您或将来接管此项目的任何人的管理开销都会减少。另外,学习起来并不难,你还可以为传入的数据编写 json 语法文档。
-
假设引发了一个未知异常(比如 TypeError)并且我不知道前缀。在这种情况下如何避免 200/traceback 响应?
-
另请参阅此博文:[Amazon API Gateway 和 AWS Lambda 中的错误处理模式] (aws.amazon.com/blogs/compute/…)
标签: python amazon-web-services aws-lambda aws-api-gateway aws-step-functions