Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Funzioni di chiamata tramite richieste HTTP

È possibile attivare una funzione tramite una richiesta HTTP utilizzando functions.https . Ciò consente di richiamare una funzione sincrona attraverso i seguenti metodi HTTP supportati: GET , POST , PUT , DELETE e OPTIONS .

Gli esempi in questa pagina si basano su una funzione di esempio che si attiva quando si invia una richiesta HTTP GET all'endpoint delle funzioni. La funzione di esempio recupera l'ora corrente del server, formatta l'ora come specificato in un parametro di query URL e invia il risultato nella risposta HTTP.

Attiva una funzione con una richiesta HTTP

Utilizzare functions.https per creare una funzione che gestisca gli eventi HTTP. Il gestore eventi per una funzione HTTP è in ascolto dell'evento onRequest() , che supporta router e app gestiti dal framework Web Express .

Utilizzo degli oggetti di richiesta e risposta Express

Utilizzato come argomenti per onRequest() , l'oggetto Request consente di accedere alle proprietà della richiesta HTTP inviata dal client e l'oggetto Response consente di inviare una risposta al client.

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

Utilizzo delle app Express esistenti

Utilizzando App come argomento per onRequest() , è possibile passare un'app Express completa a una funzione HTTP. Il codice della piastra della caldaia può essere spostato nel middleware come mostrato:

 const express = require('express');
const cors = require('cors');

const app = express();

// Automatically allow cross-origin requests
app.use(cors({ origin: true }));

// Add middleware to authenticate requests
app.use(myMiddleware);

// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));

// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);
 

Richiama una funzione HTTP

Dopo aver distribuito una funzione HTTP, è possibile invocarla tramite il proprio URL univoco. L'URL include quanto segue, in ordine:

  • La regione (o regioni) in cui è stata distribuita la funzione. Alcune funzioni di produzione potrebbero dover impostare esplicitamente la posizione per ridurre al minimo la latenza della rete.
  • Il tuo ID progetto Firebase
  • cloudfunctions.net
  • Il nome della tua funzione

Ad esempio, l'URL per invocare date() è simile al seguente:

 https://us-central1-<project-id>.cloudfunctions.net/date
 

Se si verificano errori di autorizzazione durante la distribuzione di funzioni, assicurarsi che i ruoli IAM appropriati siano assegnati all'utente che esegue i comandi di distribuzione.

Con il routing delle app Express, il nome della funzione viene aggiunto come prefisso ai percorsi URL nell'app definita. Ad esempio, l'URL per invocare il getter nell'esempio di app Express sopra è simile al seguente:

 https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
 

Se invochi funzioni HTTP dietro un firewall o un filtro IP, puoi cercare gli indirizzi IP che Google utilizza per servire le funzioni HTTP.

Utilizzare i moduli middleware con le funzioni cloud

Se è necessario iniettare dipendenze del middleware per cose come il supporto dei cookie o CORS, chiamarle all'interno della funzione. Ad esempio, per abilitare il supporto CORS, aggiungere il seguente blocco:

// Enable CORS using the `cors` express middleware.
return cors(req, res, () => {
  // ...
});

Leggi i valori dalla richiesta

La tabella seguente elenca alcuni scenari comuni:

Tipo di contenuto Corpo della richiesta Comportamento
application/json '{"name":"John"}' request.body.name uguale a "John"
application/octet-stream "il mio testo" request.body uguale a "6d792074657874" (i byte non elaborati della richiesta; consultare la documentazione del buffer Node.js )
text/plain "il mio testo" request.body uguale a "il mio testo"
application/x-www-form-urlencoded 'Name = John' request.body.name uguale a "John"

Questa analisi viene eseguita dai seguenti parser del corpo:

Supponiamo che la tua funzione venga chiamata con la seguente richiesta:

curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'

quindi i dati inviati sarebbero materializzati sotto:

Proprietà / Metodo Valore
req.method "INVIARE"
req.get('x-myheader') "123"
req.query.foo "Baz"
req.body.text "qualcosa"
req.rawBody I byte grezzi (non analizzati) della richiesta

Nell'esempio della funzione date() , la funzione verifica sia il parametro URL che il corpo per un valore di format per impostare il formato data / ora da utilizzare:

let format = req.query.format;
format = req.body.format;

Termina le funzioni HTTP

Termina sempre una funzione HTTP con send() , redirect() o end() . Altrimenti, la funzione potrebbe continuare a essere eseguita ed essere forzatamente terminata dal sistema. Vedi anche Sync, Async e Promises .

Dopo aver recuperato e formattato l'ora del server utilizzando il modulo moment Node.js, la funzione date() termina inviando il risultato nella risposta HTTP:

const formattedDate = moment().format(format);
console.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

Connessione delle funzioni HTTP all'hosting Firebase

Puoi collegare una funzione HTTP a Firebase Hosting. Le richieste sul tuo sito di hosting Firebase possono essere inoltrate a specifiche funzioni HTTP. Ciò consente anche di utilizzare il proprio dominio personalizzato con una funzione HTTP. Ulteriori informazioni sulla connessione delle funzioni cloud all'hosting Firebase .