您如何使用 json.dumps 格式化 Python,以使您的 Lambda 函数正确响应 API 网关?

How do you format Python using json.dumps, to make your Lambda function respond correctly to API Gateway?

这是我在 Stack Overflow 上的第一个 post,所以希望我足够具体。我正在尝试将 Lambda 函数(编码为 Python)与 DynamoDB 和 API 网关集成。我希望 API 到 return 来自 DynamoDB 的单个项目,但是当我导航到 API 端点时收到 Internal server error 消息。我查看了 CloudWatch Logs,他们说这是由 malformed Lambda proxy response.

引起的

经过进一步调查,我相当确定这与使用 json.dumps 格式化 Lambda responseBody 有关。但是在尝试了几十种不同的组合后我不知道正确的语法(我没有任何 Python 经验)。

这是我的 Lambda 函数:

def lambda_handler(event, context):

    ddbResponse = table.update_item(
        Key={
            "id": "user1"
        },
        UpdateExpression='ADD clicks :inc',
        ExpressionAttributeValues={
            ':inc': 1
        },
        ReturnValues="UPDATED_NEW"
    )

    responseBody = json.dumps(XXXXXXXXXX)

    apiResponse = {
        "isBase64Encoded": False,
        "statusCode": 200,
        "body": responseBody
    }

    return apiResponse

如果我只希望 API 响应是来自 DynamoDB table 的 clicks return 的数量,我必须在 XXXX 中输入什么在 json.dumps 括号之间?提前致谢

ddbResponse['Attributes']['clicks']) 会给你点击。我们可以 return

return {
    'statusCode': 200,
    'body': json.dumps({'clicks': int(ddbResponse['Attributes']['clicks'])})
}

到return只点击

{
    'statusCode': 200,
    'body': int(response['Attributes']['clicks'])
}