首页 > 解决方案 > 您如何使用 json.dumps 格式化 Python,以使您的 Lambda 函数正确响应 API Gateway?

问题描述

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

经过进一步调查,我相当确定这与responseBody使用json.dumps. 但是在尝试了几十种不同的组合后,我不知道执行此操作的正确语法(我没有任何 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 响应是clicks从 DynamoDB 表返回的数量,我必须在json.dumps括号之间的 XXXX 中添加什么?提前致谢

标签: pythonaws-lambdaamazon-dynamodbaws-api-gateway

解决方案


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

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

只返回点击次数

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

推荐阅读