Já há muito tempo vários desenvolvedores Firebase reclamavam do Firebase Hosting por fazer hosting estático apenas. Muitos gostariam de poder executar algumas funções extras no lado do servidor, e para isso recorriam à outras plataformas da Cloud, como o Heroku por exemplo.

Mas qual é a diferença entre o Firebase Hosting e as outras plataformas da cloud?

Bom, ambos fazem a hospedagem de aplicações Web, mas a principal diferença está no famoso Client-side vs. Server-side.

Firebase Hosting

O Firebase Hosting é um serviço de hosting estático, o que significa que só pode executar código javascript no lado do cliente. Isto significa que toda a lógica que você colocar na sua aplicação será executada no computador do utilizador final. Uma desvantagem desta abordagem é que por vezes temos de executar várias operações simultâneas (bastante comum na Realtime Database) e se o nosso utilizador desligar o dispositivo que está a utilizar, ou se a conexão à Internet for perdida, algumas operações podem não ser concluídas e isso talvez gere erros na nossa aplicação.

Plataformas da Cloud com NodeJS

Diferentemente do Firebase Hosting, o NodeJS permite que o código Javascript seja executado no lado do servidor. Assim, se o utilizador precisar de executar várias operações, há uma grande probabilidade de todas serem executadas com sucesso porque o risco de um servidor parar é muito menor.

Foi por causa deste “pulo de cerca” de muitos Firebase Devs que a equipa do Firebase decidiu desenvolver o Firebase Cloud Functions.

Apresentado no 2º dia do Google Cloud Next 17, o Cloud Functions é um ambiente Javascript que permite que executemos funções quando certos eventos são desencadeados (Como quando um novo dado é adicionado na base de dados ou quando um novo utilizador é registado).

Um caso bastante comum é quando queremos executar operações que seriam exaustivas no lado do cliente (por exigirem bastante uso de Internet e/ou memória). Como por exemplo quando queremos contar o número de sub-nós em um nó, ou quando queremos executar várias operações garantindo a consistência de dados.

Se você esteve a acompanhar a série Firebase Database para Desenvolvedores SQL, você provavelmente já conhece uma técnica simples para manter a consistência de dados: Multi-path updates. Se você não faz a mínima ideia do que estou a falar, leia o artigo:

O que mais posso fazer com o Cloud Functions?

É mais comum utilizar o Cloud Functions quando queremos:

Notificar utilizadores quando acontece algo interessante

Se estivermos a desenvolver uma rede social por exemplo, vamos ter de notificar os utilizadores quando a sua postagem tem um novo like:

Quando é inserido um novo like na base de dados, o Functions é chamado e é executada uma função para executar o Firebase Cloud Messaging

Executar limpeza e manutenção da Realtime Database

Se tivermos uma aplicação de chat, não seria agradável permitir que os utilizadores enviem palavras insultuosas ou obscenas. Para isso, podemos “limpar” a mensagem e re-escrever na base de dados:

Quando surge uma nova mensagem, ela é passada ao Function para ser verificada e “limpa” se necessária e no fim reescrita na base de dados

Executar tarefas exaustivas na cloud, ao invés de executar na app

Quando temos uma aplicação que permite o envio de imagens. Talvez seja melhor mostrar ao utilizador uma miniatura (thumbnail) da imagem que está a ser enviada/recebida. E além disso, temos que guardar o local da imagem na base de dados para ser baixada pelo outro utilizador:

Quando a imagem é adicionada ao storage, é gerado um thumbnail e guardado no storage e é também guardada a localização na base de dados

Integrar com serviços e APIs de terceiros

Supondo que estamos a desenvolver uma aplicação que facilita o trabalho em equipe. O utilizador precisará de avisar aos seus amigos no Slack que ele já fez o commit do projecto no GitHub. Para poupar o trabalho dele, o Cloud Functions pode fazer isso, interligando as APIs do GitHub e do Slack:

Quando o utilizador faz commit no Github, a API envia uma requisição (JSON) para o functions e a função usa a API do Slack para enviar mensagens para o canal #CommitsProjecto

Nos próximos artigos veremos os primeiros passos para utilizar o Firebase Cloud Functions e alguns destes casos mais comuns. O último caso por exemplo será aplicado na série Machine Learning. Iremos conectar um bot do api.ai ao Firebase para ele enviar ao utilizador informações que estão na base de dados.

Se você tem alguma dúvida ou sugestão, não hesite em me contactar pelo email rosariofernandes51@gmail.com ou pelo Telegram. Ficarei feliz por conversar com você. :)

--

--

Rosário Pereira Fernandes

Firebase DevRel Engineer at Google … Views and Opinions are my own.