Combine o Cloud Functions com o Firebase Hosting para gerar e veicular seu conteúdo dinâmico ou criar APIs REST como microsserviços.
O Cloud Functions para Firebase permite executar automaticamente código de back-end em resposta a solicitações HTTPS. Seu código é armazenado na nuvem do Google e executado em um ambiente gerenciado. Não há necessidade de gerenciar e dimensionar seus próprios servidores.
Para ver exemplos de casos de uso e exemplos de Cloud Functions integrados ao Firebase Hosting, visite nossa visão geral sem servidor .
Conecte o Cloud Functions ao Firebase Hosting
Esta seção fornece um exemplo passo a passo para conectar uma função ao Firebase Hosting.
Observe que, para melhorar o desempenho do fornecimento de conteúdo dinâmico, você pode opcionalmente ajustar as configurações de cache .
Etapa 1: configurar o Cloud Functions
Verifique se você tem a versão mais recente da CLI do Firebase e se inicializou o Firebase Hosting.
Para obter instruções detalhadas sobre como instalar a CLI e inicializar o Hosting, consulte o guia de primeiros passos do Hosting .
Certifique-se de configurar o Cloud Functions:
Se você já configurou o Cloud Functions, prossiga para a Etapa 2: criar e testar uma função HTTPS .
Se você não configurou o Cloud Functions:
Inicialize o Cloud Functions executando o seguinte comando na raiz do diretório do projeto:
firebase init functions
Quando solicitado, selecione JavaScript (este exemplo passo a passo usa JS).
Verifique se você tem um diretório
functions
no diretório local do projeto (criado pelo comando do Firebase que você acabou de executar). Este diretóriofunctions
é onde reside o código do Cloud Functions.
Etapa 2: Crie e teste uma função HTTPS para seu site de hospedagem
Abra
/functions/index.js
em seu editor favorito.Substitua o conteúdo do arquivo pelo código a seguir.
Este código cria uma função HTTPS (chamada
bigben
) que responde às solicitações HTTPS com umBONG
para cada hora do dia, como um relógio.const functions = require('firebase-functions'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });
Teste suas funções localmente usando o Firebase Local Emulator Suite .
Na raiz do diretório local do projeto, execute o seguinte comando:
firebase emulators:start
Acesse a função por meio da URL local retornada pela CLI, por exemplo:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
Acesse a documentação do Cloud Functions para saber mais sobre solicitações HTTPS.
A próxima etapa mostra como acessar essa função HTTPS a partir de um URL do Firebase Hosting para que ela possa gerar conteúdo dinâmico para seu site hospedado no Firebase.
Etapa 3: direcionar solicitações HTTPS para sua função
Com regras de reescrita , você pode direcionar solicitações que correspondam a padrões específicos para um único destino. As etapas a seguir mostram como direcionar todas as solicitações do caminho ../bigben
em seu site de hospedagem para executar a função bigben
.
Abra seu arquivo
firebase.json
.Adicione a seguinte configuração
rewrite
na seçãohosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": { "functionId": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } } ] }
Confirme se o seu redirecionamento funciona conforme o esperado testando novamente com os emuladores do Firebase.
Na raiz do diretório local do projeto, execute o seguinte comando:
firebase emulators:start
Visite o URL hospedado localmente do seu site conforme retornado pela CLI (geralmente
localhost:5000
), mas anexe o URL combigben
, assim:http://localhost:5000/bigben
Itere sua função e sua funcionalidade para seu site. Use os emuladores do Firebase para testar essas iterações.
Para obter o melhor desempenho, coloque suas funções com Hosting escolhendo uma das seguintes regiões:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Visite a página de configuração de hospedagem para obter mais detalhes sobre regras de reescrita . Você também pode aprender sobre a ordem de prioridade das respostas para diversas configurações de hospedagem.
Observe que, para melhorar o desempenho do fornecimento de conteúdo dinâmico, você pode opcionalmente ajustar as configurações de cache .
Etapa 4: implantar sua função
Depois que sua função estiver funcionando conforme desejado no emulador, você poderá prosseguir com a implantação, teste e execução com recursos reais do projeto. Este é um bom momento para considerar a configuração de opções de tempo de execução para controlar o comportamento de escalabilidade para funções em execução na produção.
Implante sua função, bem como seu conteúdo e configuração de hospedagem em seu site, executando o seguinte comando na raiz do diretório local do projeto:
firebase deploy --only functions,hosting
Acesse seu site ativo e sua função nos seguintes URLs:
Seus subdomínios do Firebase:
PROJECT_ID .web.app/bigben
ePROJECT_ID .firebaseapp.com/bigben
Quaisquer domínios personalizados conectados:
CUSTOM_DOMAIN /bigben
Use uma estrutura da web
Você pode usar estruturas da Web, como Express.js , no Cloud Functions para fornecer o conteúdo dinâmico do seu aplicativo e escrever aplicativos da Web complexos com mais facilidade.
A seção a seguir fornece um exemplo passo a passo para usar Express.js com Firebase Hosting e Cloud Functions.
Instale Express.js em seu projeto local executando o seguinte comando em seu diretório
functions
:npm install express --save
Abra seu arquivo
/functions/index.js
, importe e inicialize Express.js:const functions = require('firebase-functions'); const express = require('express'); const app = express();
Adicione os dois pontos de extremidade a seguir:
Adicione o primeiro endpoint para servir o índice do nosso site em
/
.app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });
E outro endpoint para retornar a contagem do
BONG
como uma API, no formato JSON, em/api
:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
Exporte o aplicativo Express.js como uma função HTTPS:
exports.app = functions.https.onRequest(app);
No seu arquivo
firebase.json
, direcione todas as solicitações para a funçãoapp
. Essa reescrita permite que o Express.js atenda aos diferentes subcaminhos que configuramos (neste exemplo,/
e/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Adicionar middleware
Continuando nosso exemplo, agora que você está usando Express.js, você pode adicionar o middleware Express.js da maneira típica. Por exemplo, você pode habilitar solicitações CORS em nossos endpoints.
Instale o middleware
cors
executando o seguinte comando:npm install --save cors
Abra seu arquivo
/functions/index.js
e adicionecors
ao seu aplicativo Express.js, assim:const cors = require('cors')({origin: true}); app.use(cors);
Acesse a documentação do Cloud Functions para saber mais sobre como usar o Firebase com aplicativos Express e módulos de middleware.
Próximos passos
Configure o cache para seu conteúdo dinâmico em uma CDN global.
Interaja com outros serviços do Firebase usando o SDK Admin do Firebase .
Revise os preços , as cotas e os limites do Cloud Functions.