Python中AWS Lambda对接API Gateway:返回statusCode还是status_code?
在Python中通过API Gateway使用AWS Lambda时,HTTP响应字段用"statusCode"还是"status_code"?
核心结论
- 配合API Gateway使用Lambda时,必须用**"statusCode"**作为状态码字段名,这是API Gateway识别并生成HTTP响应状态码的约定字段。
- Python requests库的
Response对象中,状态码属性是status_code(下划线分隔),这是requests自身的命名规则,和API Gateway的响应字段分属不同场景。
问题解析
当你从Lambda返回如下内容:
return { "statusCode": 500, 'message': "第三方API调用失败。查看服务器日志获取详情。" }
用requests调用后得到的结果:
post_update_response.status_code = 200
post_update_response.text:
{"statusCode": 500, "message": "第三方API调用失败。查看服务器日志获取详情。"}
出现这个问题的原因是你的API Gateway和Lambda的集成模式不是Lambda代理集成。只有在代理集成模式下,API Gateway才会自动解析Lambda返回的statusCode字段,将其设置为HTTP响应的状态码;如果是其他集成模式,API Gateway会默认返回200状态码,同时把Lambda的返回值直接作为响应体返回。
解决方法
- 切换为Lambda代理集成:在API Gateway的集成设置中选择Lambda代理集成,这样API Gateway会自动根据Lambda返回的
statusCode、headers、body等字段构建标准HTTP响应,此时requests调用后就能拿到正确的status_code(比如500)。 - 配置集成响应映射:如果无法使用代理集成,需要在API Gateway的集成响应中手动配置规则,将Lambda返回的
statusCode字段值映射到对应的HTTP状态码。
内容的提问来源于stack exchange,提问作者rajat banerjee
相关产品推荐
相关产品推荐

