Serverless Framework Python lambda直接返回JSON



我正试图了解如何使用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"
}
}

相关内容

  • 没有找到相关文章

最新更新