python - 您如何使用 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 中添加什么?提前致谢
解决方案
ddbResponse['Attributes']['clicks'])
会给你点击。我们可以回来
return {
'statusCode': 200,
'body': json.dumps({'clicks': int(ddbResponse['Attributes']['clicks'])})
}
只返回点击次数
{
'statusCode': 200,
'body': int(response['Attributes']['clicks'])
}
推荐阅读
- c# - 简单的注入器如何将批量注册的泛型类型注入构造函数
- regex - 使用oracle在x连字符后提取字符串
- python - 如何在 DataFrame 中将 PivotTable 转换为 Pandas / Numpy?
- ros - HTC Vive 到 Baxter 坐标系
- angular - Angular 6,单个延迟加载模块中的共享模块导致应用程序无法进行更改
- spring-boot - 使用带有嵌入式 Eureka 服务器的 RouterFunction
- java - 发送带有未来时间戳的证书
- scala - Spark Driver 死了,但没有杀死应用程序
- rest - Checkout.js + 服务器端 -> country_code 和使用 REST API /v1/payments/payment 的电话问题
- php - Slim 应用程序错误数据库