Pubblica contenuti dinamici e ospita microservizi con Cloud Functions

Associa Cloud Functions a Firebase Hosting per generare e pubblicare i tuoi contenuti dinamici o creare API REST come microservizi.

Cloud Functions for Firebase ti consente di eseguire automaticamente il codice backend in risposta alle richieste HTTPS. Il tuo codice è archiviato nella cloud di Google e viene eseguito in un ambiente gestito. Non è necessario gestire e scalare i tuoi server.

Per esempi di casi d'uso e campioni per Cloud Functions integrato con Firebase Hosting, consulta la nostra panoramica serverless.

Collegare Cloud Functions a Firebase Hosting

Questa sezione fornisce un esempio di procedura dettagliata per collegare una funzione a Firebase Hosting.

Tieni presente che, per migliorare il rendimento della pubblicazione di contenuti dinamici, puoi facoltativamente ottimizzare le impostazioni della cache.

Passaggio 1: configura Cloud Functions

  1. Assicurati di avere l'ultima versione di Firebase CLI e che hai inizializzato Firebase Hosting.

    Per istruzioni dettagliate sull'installazione dell'interfaccia a riga di comando e sull'inizializzazione Hosting, consulta la guida introduttiva per Hosting.

  2. Assicurati di aver configurato Cloud Functions:

    • Se hai già configurato Cloud Functions, puoi passare a Passaggio 2: crea e testa una funzione HTTPS.

    • Se non hai configurato Cloud Functions:

      1. Inizializza Cloud Functions eseguendo il seguente comando dalla directory principale del progetto:

        firebase init functions
      2. Quando richiesto, seleziona JavaScript (questo esempio di procedura dettagliata utilizza JS).

      3. Verifica di avere una directory functions nella directory del progetto locale (creata dal comando Firebase appena eseguito). Questa functions directory contiene il codice per Cloud Functions.

Passaggio 2: crea e testa una funzione HTTPS per il sito Hosting

  1. Apri /functions/index.js nell'editor che preferisci.

  2. Sostituisci i contenuti del file con il seguente codice.

    Questo codice crea una funzione HTTPS (denominata bigben) che risponde alle richieste HTTPS con un BONG per ogni ora del giorno, proprio come un orologio.

    const functions = require('firebase-functions/v1');
    
    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>`);
    });
    
  3. Testa le funzioni in locale utilizzando il Firebase Local Emulator Suite.

    1. Dalla directory principale del progetto locale, esegui il seguente comando:

      firebase emulators:start
    2. Accedi alla funzione tramite l'URL locale restituito dall'interfaccia a riga di comando, per esempio: http://localhost:5001/PROJECT_ID/us-central1/bigben.

Visita la Cloud Functions documentazione per scoprire di più sulle richieste HTTPS.

Il passaggio successivo ti illustra come accedere a questa funzione HTTPS da un Firebase Hosting URL in modo che possa generare contenuti dinamici per il tuo sito ospitato su Firebase.

Passaggio 3: indirizza le richieste HTTPS alla funzione

Con le regole di riscrittura, puoi indirizzare le richieste che corrispondono a pattern specifici a una singola destinazione. I passaggi seguenti mostrano come indirizzare tutte le richieste dal percorso ../bigben sul sito Hosting per eseguire la funzione bigben.

  1. Apri il tuo firebase.json file.

  2. Aggiungi la seguente configurazione rewrite nella sezione hosting:

    "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)
        }
      } ]
    }
    
  3. Verifica che il reindirizzamento funzioni come previsto eseguendo nuovamente il test con gli emulatori Firebase.

    1. Dalla directory principale del progetto locale, esegui il seguente comando:

      firebase emulators:start
    2. Visita l'URL ospitato in locale per il tuo sito restituito dall'interfaccia a riga di comando (in genere localhost:5000), ma aggiungi bigben all'URL, in questo modo: http://localhost:5000/bigben

  4. Itera sulla funzione e sulla sua funzionalità per il tuo sito. Utilizza gli emulatori Firebase per testare queste iterazioni.

Per ottenere il massimo rendimento, colloca le funzioni con Hosting by scegliendo una delle seguenti regioni:

  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

Per ulteriori dettagli sulle regole di riscrittura, consulta la pagina di configurazione per Hosting. Puoi anche scoprire di più sull' ordine di priorità delle risposte per varie Hosting configurazioni.

Tieni presente che, per migliorare il rendimento della pubblicazione di contenuti dinamici, puoi facoltativamente ottimizzare le impostazioni della cache.

Passaggio 4: esegui il deployment della funzione

Una volta che la funzione funziona come previsto nell'emulatore, puoi procedere al deployment, al test e all'esecuzione con le risorse del progetto reali. Questo è un buon momento per valutare l'impostazione delle opzioni di runtime per controllare il comportamento di scalabilità delle funzioni in esecuzione in produzione.

  1. Esegui il deployment della funzione, nonché dei contenuti e della configurazione di Hosting nel tuo sito, eseguendo il seguente comando dalla directory principale del progetto locale:

    firebase deploy --only functions,hosting
  2. Accedi al sito live e alla funzione agli URL seguenti:

Utilizzare un framework web

Puoi utilizzare framework web, come Express.js, in Cloud Functions per erogare i contenuti dinamici della tua app e scrivere app web complesse più facilmente.

La sezione seguente fornisce un esempio di procedura dettagliata per l'utilizzo di Express.js con Firebase Hosting e Cloud Functions.

  1. Installa Express.js nel progetto locale eseguendo il seguente comando dalla directory functions:

    npm install express --save
  2. Apri il file /functions/index.js, quindi importa e inizializza Express.js:

    const functions = require('firebase-functions/v1');
    const express = require('express');
    const app = express();
  3. Aggiungi i due endpoint seguenti:

    1. Aggiungi il primo endpoint per pubblicare l'indice del nostro sito web all'indirizzo /.

      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>`);
      });
      
    2. E un altro endpoint per restituire il conteggio BONG come API, in formato JSON, all'indirizzo /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)});
      });
      
  4. Esporta l'app Express.js come funzione HTTPS:

    exports.app = functions.https.onRequest(app);
  5. Nel file firebase.json, indirizza tutte le richieste alla funzione app. Questa riscrittura consente a Express.js di pubblicare il diverso sottopercorso che abbiamo configurato (in questo esempio, / e /api).

    {
     "hosting": {
       // ...
    
       // Add the "rewrites" attribute within "hosting"
       "rewrites": [ {
         "source": "**",
         "function": "app"
       } ]
     }
    }

Aggiungere il middleware

Continuando con il nostro esempio, ora che utilizzi Express.js, puoi aggiungere il middleware Express.js nel modo consueto. Ad esempio, puoi attivare CORS richieste sui nostri endpoint.

  1. Installa il middleware cors eseguendo il seguente comando:

    npm install --save cors
  2. Apri il file /functions/index.js, quindi aggiungi cors all'app Express.js, in questo modo:

    const cors = require('cors')({origin: true});
    app.use(cors);

Visita la Cloud Functions documentazione per scoprire di più sull'utilizzo di Firebase con le app Express e i moduli middleware.

Passaggi successivi