我正在将 API Gateway 与 Python lambda 结合使用。我创建了 openapi.yml,如下代码:
responses:
"200":
description: "200 response"
content:
application/json:
schema:
type: array
items:
type: object
properties:
table_id:
type: integer
format: int64
table_name:
type: string
我从 python lambda 返回以下代码:
response = [{
"table_id": 2323,
"table_name":"test_table_1"
},
{
"table_id": 1234,
"table_name":"test_table_2"
}]
return {
"statusCode": 200,
"headers": {'Content-Type': 'application/json'},
"body": response
};
现在使用上面的代码,我收到 502 错误 - 由于配置错误而执行失败。 Lambda 代理响应格式错误。这告诉我我的回复格式不正确。然而,当我检查 lambda 响应和 openapi.yml 规范时,它看起来很好。
但是当我这样做时
"body": json.dumps(response)
它工作得很好。
使用 lambda 时我们是否总是需要对响应对象进行字符串化,或者我在这里遗漏了一些东西?
这是因为 API Gateway 希望响应正文是字符串,而不是列表。 尝试使用json.dumps,可以将响应列表转换为JSON字符串
return {
"statusCode": 200,
"headers": {'Content-Type': 'application/json'},
"body": json.dumps(response)
};