Gatilhos do Firebase Realtime Database
Com o Cloud Run functions, é possível processar eventos no Firebase Realtime Database no mesmo projeto do Google Cloud que a função. O Cloud Run functions permite executar operações de banco de dados com todos os privilégios administrativos e garante o processamento individual de cada alteração feita no banco de dados. É possível fazer alterações no Firebase Realtime Database por meio do SDK Admin do Firebase.
Em um ciclo de vida comum, uma função do Firebase Realtime Database faz o seguinte:
Aguarda alterações feitas em um local de banco de dados específico.
É acionada quando um evento ocorre e realiza as tarefas dele.
Recebe um objeto de dados que contém um snapshot dos dados armazenados no documento especificado.
Tipos de evento
O Functions permite processar eventos de banco de dados em dois níveis de especificidade. É possível detectar especificamente apenas eventos de criação, atualização ou exclusão ou detectar qualquer alteração de qualquer tipo em um caminho. O Cloud Run functions dá suporte aos seguintes tipos de evento para o Realtime Database:
Tipo de evento | Gatilho |
---|---|
providers/google.firebase.database/eventTypes/ref.write |
Acionado em qualquer evento de mutação: quando os dados são criados, atualizados ou excluídos no Realtime Database. |
providers/google.firebase.database/eventTypes/ref.create (padrão) |
Acionado quando novos dados são criados no Realtime Database. |
providers/google.firebase.database/eventTypes/ref.update |
Acionado quando os dados são atualizados no Realtime Database. |
providers/google.firebase.database/eventTypes/ref.delete |
Acionado quando os dados são excluídos do Realtime Database. |
Como especificar o caminho e a instância do banco de dados
Para controlar quando e onde a função será acionada, você precisa especificar um caminho e, como opção, uma instância de banco de dados.
Caminho
As especificações de caminho correspondem a todas as gravações realizadas em um caminho, inclusive as que acontecem em qualquer lugar abaixo dele. Se você definir o caminho para sua função como /foo/bar
, ele corresponderá aos eventos nestes dois locais:
/foo/bar
/foo/bar/baz/really/deep/path
Em ambos os casos, o Firebase interpreta que o evento ocorre em /foo/bar
, e os dados do evento incluem os dados antigos e novos em /foo/bar
. Se os dados do evento forem grandes, considere usar várias funções em caminhos mais profundos, em vez de uma única função próxima da raiz do banco de dados. Para ter o melhor desempenho, solicite apenas dados no nível mais profundo possível.
Para especificar um componente do caminho como caractere curinga, basta colocá-lo entre chaves. foo/{bar}
corresponde a qualquer filho de /foo
. Os valores desses componentes de caminho curinga estão disponíveis no objeto event.params
da sua função.
Neste exemplo, o valor está disponível como event.params.bar
.
Os caminhos com caracteres curinga podem corresponder a vários eventos de uma única gravação. Uma inserção de:
{
"foo": {
"hello": "world",
"firebase": "functions"
}
}
corresponde ao caminho /foo/{bar}
duas vezes: uma vez com "hello": "world"
e novamente com "firebase": "functions"
.
Instância
Ao usar o console do Google Cloud, é preciso especificar a instância do banco de dados.
Ao usar a CLI do Google Cloud, a instância precisa ser especificada como parte da string --trigger-resource
.
O exemplo a seguir usaria o seguinte na string
--trigger-resource
:
--trigger-resource projects/_/instances/DATABASE_INSTANCE/refs/PATH
Estrutura do evento
Ao manipular um evento do Realtime Database, o objeto data
contém duas propriedades que são fornecidas no formato de objeto JSON:
data
: um instantâneo dos dados registrados antes do evento que acionaram a função.delta
: um snapshot dos dados obtidos após o evento que acionou a função.
Exemplo de código
Node.js
Python
Go
Java
C#
Ruby
PHP
Como implantar a função
O comando gcloud a seguir implanta uma função que será acionada por eventos create
no caminho /messages/{pushId}/original
:
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
Argumento | Descrição |
---|---|
FUNCTION_NAME |
O nome registrado da função do Cloud Run que você está implantando.
Pode ser o nome de uma função no código-fonte ou uma string arbitrária. Se FUNCTION_NAME for uma string arbitrária, você precisará incluir a sinalização --entry-point .
|
--entry-point ENTRY_POINT |
O nome de uma função ou classe no código-fonte. Opcional, a menos que
você não tenha usado FUNCTION_NAME
para especificar a
função no código-fonte a ser executada durante a implantação. Nesse caso, use --entry-point para fornecer o nome da função executável.
|
--trigger-event NAME |
O nome do tipo de evento que a função quer receber. Neste caso, ele será um dos seguintes: escrever, criar, atualizar ou excluir. |
--trigger-resource NAME |
O caminho completo do banco de dados em que a função vai detectar.
Ele precisa estar de acordo com o seguinte formato: projects/_/instances/DATABASE_INSTANCE/refs/PATH
|
--runtime RUNTIME |
O nome do ambiente de execução que você está usando. Para uma lista completa, consulte a referência do gcloud .
|