我在AWS API Gateway中设置了一个简单的API . 它被设置为通过API网关代理集成调用Python 2.7 lambda函数 .
我在本地和lambda测试控制台调用lambda工作(处理正文并更新数据库)时遇到了一个奇怪的错误,但没有通过curl或Postman .
事实证明,当通过lambda测试控制台调用时, event['body']
对象将以 dict
形式出现 . 当通过HTTP客户端调用时,它以字符串形式出现( Unicode
) .
我当然可以解决它,但我想理解它,而且我也更喜欢一个合适的Python对象 . 我也希望能够使用lambda测试控制台,但目前我不能,因为它以不同的方式传递输入 .
是否有一个配置开关我将丢失,它将强制API网关将请求体(以及所有其他参数)序列化为python dict
或正确的对象? documentation关于传递内容的具体细节是稀疏的,说明:
event - AWS Lambda使用此参数将事件数据传递给处理程序 . 此参数通常是Python dict类型 . 它也可以是list,str,int,float或NoneType类型 .
我知道这个模糊的内容涵盖了我所看到的内容,但它并不完全有用 .
1 回答
当您在本地或通过Lambda控制台调用lambda时,您直接调用该lambda,因此您的lambda会准确接收您发送的内容 .
当您通过API网关调用它时,API Gateway会根据您的HTTP请求为您创建
event
对象 . 它添加了HTTP标头,路径,查询字符串,有效负载等 .这里's a summary of what you'从API网关调用获得
event
:参考:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format
如您所见,
body
将作为string
发送给您,您可以使用json.loads()
进行解析 .