Firebase 实时数据库触发器
借助 Cloud Run functions,您可以处理与该函数属于同一 Google Cloud 项目的 Firebase Realtime Database 中的事件。Cloud Run functions 让您能以完整的管理权限运行数据库操作,并可确保对数据库所做的每项更改都会单独进行处理。您可以通过 Firebase Admin SDK 更改 Firebase Realtime Database。
在典型生命周期中,Firebase Realtime Database 函数会执行以下操作:
等待对特定数据库位置执行的更改。
在事件发生时触发并执行相应的任务。
接收相关数据对象,该对象包含了存储在指定文档中的数据的快照。
事件类型
函数可让您以两种不同的侦听范围处理数据库事件;您可以只侦听创建、更新或删除事件,也可以侦听某个路径上任何类型的任何更改。Cloud Run functions 支持实时数据库的以下事件类型:
事件类型 | 触发器 |
---|---|
providers/google.firebase.database/eventTypes/ref.write |
当实时数据库中发生任何变更事件(创建、更新或删除数据)时触发。 |
providers/google.firebase.database/eventTypes/ref.create (默认) |
当实时数据库中创建了新数据时触发。 |
providers/google.firebase.database/eventTypes/ref.update |
当实时数据库中更新了数据时触发。 |
providers/google.firebase.database/eventTypes/ref.delete |
当实时数据库中删除了数据时触发。 |
指定数据库路径和实例
如需控制函数的触发时间和位置,您需要指定路径,并视情况指定数据库实例。
路径
所指定的路径会匹配与之相关的所有写入操作(包括在此路径下任何位置发生的写入操作)。如果您将函数的路径设置为 /foo/bar
,以下两个位置发生的事件都会与其匹配:
/foo/bar
/foo/bar/baz/really/deep/path
不管是哪种情况,Firebase 都会解读为事件是在 /foo/bar
下发生的,且事件数据包括 /foo/bar
下的旧数据和新数据。如果事件数据可能很大,请考虑在更深的路径下使用多个函数,而不是在数据库根目录附近使用单个函数。为了获得最佳性能,请仅在尽可能深的路径层级中发出数据请求。
您可以用大括号括住路径的某个部分,将其指定为通配符;foo/{bar}
会匹配 /foo
的任何子路径。这些通配符路径组成部分的值可从函数的 event.params
对象中获得。在此示例中,该值通过 event.params.bar
提供。
包含通配符的路径可以匹配单个写入操作引发的多个事件。例如以下数据:
{
"foo": {
"hello": "world",
"firebase": "functions"
}
}
该数据的插入操作会匹配路径 /foo/{bar}
两次:第一次匹配 "hello": "world"
,第二次匹配 "firebase": "functions"
。
实例
使用 Google Cloud 控制台时,必须指定数据库实例。
使用 Google Cloud CLI 时,必须将实例指定为 --trigger-resource
字符串的一部分。
例如,以下命令会在 --trigger-resource
字符串中使用以下实例:
--trigger-resource projects/_/instances/DATABASE_INSTANCE/refs/PATH
事件结构
处理实时数据库事件时,data
对象包含以 JSON 对象格式提供的两个属性:
data
:在触发函数的事件之前截取的数据快照。delta
:在触发函数的事件之后截取的数据快照。
代码示例
Node.js
Python
Go
Java
C#
Ruby
PHP
部署函数
以下 gcloud 命令会部署一个将由路径 /messages/{pushId}/original
上的 create
事件触发的函数:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --entry-point ENTRY_POINT \ --trigger-event providers/google.firebase.database/eventTypes/ref.create \ --trigger-resource projects/_/instances/DATABASE_INSTANCE/refs/messages/{pushId}/original \ --runtime RUNTIME
参数 | 说明 |
---|---|
FUNCTION_NAME |
您要部署的 Cloud Run functions 函数的注册名称。
这可以是源代码中函数的名称,也可以是任意字符串。如果 FUNCTION_NAME 是任意字符串,则必须添加 --entry-point 标志。 |
--entry-point ENTRY_POINT |
源代码中函数或类的名称。可选,除非您未使用 FUNCTION_NAME 指定源代码中要在部署期间执行的函数。在这种情况下,您必须使用 --entry-point 提供可执行函数的名称。 |
--trigger-event NAME |
函数希望接收的事件类型的名称。 在本示例中,该名称将为以下四项之一:write、create、update 或 delete。 |
--trigger-resource NAME |
函数将侦听的完全限定数据库路径。此路径应符合以下格式:
projects/_/instances/DATABASE_INSTANCE/refs/PATH 。 |
--runtime RUNTIME |
您使用的运行时的名称。如需完整列表,请参阅 gcloud 参考文档。 |