我正在努力了解如何使用 AWS API Gateway 和 Lambda 函数 (python) 作为集成类型来设置正确的 http 状态代码和错误消息。
我正在使用一个简单的示例,这里有详细信息:
Lambda 函数
def lambda_handler(event, context):
return_json = {}
if event["request-number"] == "":
raise Exception("Error request-number can't be empty")
elif event["request-number"] == "3":
raise Exception("Value not accepted")
else:
return_json = {"service-activated": "TRUE"}
return return_json
API /资源测试 POST
这与上面的 lambda 集成。
目标: 当 request-number = "" 时返回 HTTP 400 和带有消息的正文Error request-number can't be empty 。
实施:
- 我创建了一个新方法响应 400
- 在 lambda 错误正则表达式中,我映射了 Error.* 以便捕获该字符串
在正文映射模板中:我创建了一个内容类型为 application/json 并作为我使用过的模板(在设置之前有一个标签符号,但这会破坏此页面的格式,所以我省略了它):
set($inputRoot = $input.path('$')) { "message" : $input.json('$.errorMessage') }
我已经检查了方法响应中有http状态400(我有)
通过 AWS API Gateway 控制台进行测试 ,我已经测试了 HTTP 400 并且正文中的消息Error request-number can't be empty。很好,我实现了我想要的:
我决定也通过 Postman 和 Chrome 插件 Restlet Client 进行测试,我得到的是 http 状态 200 和错误消息格式不正确:
现在,这很奇怪:从 AWS API 控制台来看,一切都很好,从外部服务来看,一切都没有按预期工作。
有没有人不得不处理类似的事情?
谢谢!