带有 Lambda 的 API 网关只能响应 JSON 字符串类型正文吗?

问题描述 投票:0回答:1

我正在将 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 时我们是否总是需要对响应对象进行字符串化,或者我在这里遗漏了一些东西?

python json lambda yaml
1个回答
0
投票

这是因为 API Gateway 希望响应正文是字符串,而不是列表。 尝试使用json.dumps,可以将响应列表转换为JSON字符串

 return { 
       "statusCode": 200,
       "headers": {'Content-Type': 'application/json'},
       "body": json.dumps(response)
       };
© www.soinside.com 2019 - 2024. All rights reserved.