Serverless Framework Python lambda return JSON 直接
Serverless Framework Python lambda return JSON directly
我正在尝试找出如何 return 响应作为 JSON 直接使用无服务器框架。
这是 AWS 上具有 Lambda 代理集成的功能。全部默认设置。
目标是从 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"
}
}
所以这很奇怪,为什么我把所有东西都当作正文?如何正确配置它以便我只获得 "real" 正文?
使用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"
}
}
方法 #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}
我正在尝试找出如何 return 响应作为 JSON 直接使用无服务器框架。 这是 AWS 上具有 Lambda 代理集成的功能。全部默认设置。 目标是从 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"
}
}
所以这很奇怪,为什么我把所有东西都当作正文?如何正确配置它以便我只获得 "real" 正文?
使用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"
}
}
方法 #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}