6

I'm trying to find out how can I return the response as a JSON directly using Serverless Framework. This is a function on AWS with Lambda Proxy Integration. All default setting. The goal is to from the python lambda function, the HTTP response client gets is directly a JSON object, instead of a string serialization of a JSON.

The python handler is as simple as this one

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

The function looks like this:

    functions:
      report:
        handler: handler.handle
        events:
          - http:
              path: api/mypath
              method: post
              authorizer: aws_iam

With these configurations, the response BODY I get in Postman is:

    {
        "statusCode": 200,
        "body": {
            "foo": "bar"
        },
        "headers": {
            "Content-Type": "application/json"
        }
    }

So this is strange, why I get everything as body? How do I configure it properly so that I only get the "real" body?

2 Answers 2

6

approach #1

Use json.dumps() to convert JSON to string.

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

approach #2

Use lambda integration and avoid json.dumps(). But this will transform your output as

{ foo = bar}
Sign up to request clarification or add additional context in comments.

Comments

4

The body needs to be stringified when working with API Gateway

The pythonish way to do it is to pass the JSON body into the json.dumps function.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.