我正在通过Python选项为Firebase编写Cloud Function。我对Firebase实时数据库触发器感兴趣;换句话说,我愿意听听实时数据库中发生的事件。
Python环境提供以下用于处理实时数据库触发器的签名:
class MessageTypeReader {
static func readMessageType(of message: Message) -> MessageType {
return MessageType(rawValue: message.messageType.swift)!
}
}
这看起来不错。 def handleEvent(data, context):
# Triggered by a change to a Firebase RTDB reference.
# Args:
# data (dict): The event payload.
# context (google.cloud.functions.Context): Metadata for the event.
参数提供2个字典; data
用于在更改之前通知数据,'data'
用于更改的位。
在将此签名与'delta'
环境进行比较时,会引起混乱。这是来自Node.js
世界的类似签名:
Node.js
在此签名中,exports.handleEvent = functions.database.ref('/path/{objectId}/').onWrite((change, context) => {}
参数非常强大,它似乎是change
类型。它具有不错的辅助方法,例如firebase.database.DataSnapshot
或hasChild()
,可提供有关已更改对象的信息。
问题是:Python环境是否有类似的numChildren()
对象?使用Python,是否需要查询数据库以获取子代数?真的不清楚什么Python环境可以做什么,不能做什么。
相关API /参考/文档:
答案 0 :(得分:1)
python运行时当前没有类似的对象结构。 firebase-functions
SDK实际上在创建易于使用的对象方面为您做了很多工作。在python环境中没有类似的事情发生。从本质上来说,您对触发函数的事件所包含的数据有效负载有了一个清晰的原始视图。
如果使用Firebase SDK为节点(不)编写“实时数据库”触发器,则情况类似。您将获得一个真正的基本对象,其属性类似于python字典。
这就是为什么将firebase-functions
与Firebase SDK一起使用是从Firebase产品编写触发器的首选环境的原因。开发人员的经验是卓越的:它为您完成了许多便捷的工作。缺点是您必须支付Firebase Admin SDK的费用才能在冷启动时加载和初始化。
请注意,您可以使用Firebase Admin SDK for python解析事件并创建自己的便利对象。