AWS API 网关,Python Lambda 和 HTTP 状态
AWS API Gateway, Python Lambda and HTTP status
我正在努力了解如何使用 AWS API 网关和 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 集成在一起。
目标:return HTTP 400 和 body 消息 错误 request-number 不能为空 当 request-number = "".
实施:
- 我创建了一个新方法响应 400
- 在 lambda 错误正则表达式中,我映射了 Error.* 以便捕获该字符串
在 body 映射模板中:我创建了一个 content-type 作为 application/json 和我使用的模板(之前有一个标签符号设置,但这搞砸了这个页面的格式,所以我省略了它):
set($inputRoot = $input.path('$'))
{
"message" : $input.json('$.errorMessage')
}
我已经检查过在方法响应中有 http 状态 400(我有)
测试
通过 AWS API 网关控制台,我测试了 HTTP 400,并且 body 中的消息 错误 request-number 不能为空 。很好,我实现了我想要的:
我决定也通过 Postman 和 Chrome 插件 Restlet Client 进行测试,我得到的是 http 状态 200 和错误消息格式不正确:
现在,这很奇怪:从 AWS API 控制台一切都很好,从外部服务没有任何工作如预期的那样。
有没有人遇到过类似的事情?
谢谢!
您是否重新部署了 API?
我正在努力了解如何使用 AWS API 网关和 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 集成在一起。
目标:return HTTP 400 和 body 消息 错误 request-number 不能为空 当 request-number = "".
实施:
- 我创建了一个新方法响应 400
- 在 lambda 错误正则表达式中,我映射了 Error.* 以便捕获该字符串
在 body 映射模板中:我创建了一个 content-type 作为 application/json 和我使用的模板(之前有一个标签符号设置,但这搞砸了这个页面的格式,所以我省略了它):
set($inputRoot = $input.path('$')) { "message" : $input.json('$.errorMessage') }
我已经检查过在方法响应中有 http 状态 400(我有)
测试 通过 AWS API 网关控制台,我测试了 HTTP 400,并且 body 中的消息 错误 request-number 不能为空 。很好,我实现了我想要的:
我决定也通过 Postman 和 Chrome 插件 Restlet Client 进行测试,我得到的是 http 状态 200 和错误消息格式不正确:
现在,这很奇怪:从 AWS API 控制台一切都很好,从外部服务没有任何工作如预期的那样。
有没有人遇到过类似的事情?
谢谢!
您是否重新部署了 API?