【问题标题】:Serverless Framework Python lambda return JSON directly无服务器框架 Python lambda 直接返回 JSON
【发布时间】:2020-03-14 16:13:20
【问题描述】:

我正在尝试找出如何使用无服务器框架直接将响应作为 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"
        }
    }

所以这很奇怪,为什么我把一切都当作身体?如何正确配置它以便我只得到“真实”的身体?

【问题讨论】:

    标签: python aws-lambda aws-api-gateway serverless-framework serverless


    【解决方案1】:

    使用 API Gateway 时需要对正文进行字符串化

    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"
          }
      }
    

    【讨论】:

      【解决方案2】:

      方法#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}
      

      【讨论】:

        猜你喜欢
        • 2018-09-17
        • 2017-02-12
        • 2017-11-20
        • 2022-12-09
        • 1970-01-01
        • 2019-07-23
        • 2021-03-10
        • 2017-02-25
        • 1970-01-01
        相关资源
        最近更新 更多