我正试图了解如何使用Serverless Framework直接将响应作为JSON返回。这是带有Lambda代理集成的AWS上的一个功能。所有默认设置。目标是从python lambda函数中,客户端获得的HTTP响应直接是一个JSON对象,而不是JSON的字符串序列化。
python处理程序和这个一样简单
def handle(event, context):
log.info("Hello Wold")
log.info(json.dumps(event, indent=2))
return {
"statusCode": 200,
"body": {"foo": "bar"},
"headers": {
"Content-Type": "application/json"
}
}
功能如下:
functions:
report:
handler: handler.handle
events:
- http:
path: api/mypath
method: post
authorizer: aws_iam
有了这些配置,我在Postman中得到的BODY响应是:
{
"statusCode": 200,
"body": {
"foo": "bar"
},
"headers": {
"Content-Type": "application/json"
}
}
所以这很奇怪,为什么我把一切都当成了身体?如何正确配置它,以便只获得"真实"的身体?
方法#1
使用json.dumps((将json转换为字符串。
import json
def handle(event, context):
log.info("Hello Wold")
log.info(json.dumps(event, indent=2))
return {
"statusCode": 200,
"body": json.dumps({"foo": "bar"}),
"headers": {
"Content-Type": "application/json"
}
}
方法#2
使用lambda集成并避免json.dumps((。但这会将您的输出转换为
{ foo = bar}
使用API网关时,需要对主体进行字符串化
pythonish
的方法是将JSON主体传递到json.dumps
函数中。
def handle(event, context):
log.info("Hello Wold")
log.info(json.dumps(event, indent=2))
return {
"statusCode": 200,
"body": json.dumps({"foo": "bar"}),
"headers": {
"Content-Type": "application/json"
}
}