欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用并在之后需要时轻松地扩大应用规模。立即报名

Fonctions d'appel via des requêtes HTTP

Comme dans la v1, vous pouvez déclencher une fonction via une requête HTTP avec le gestionnaire onRequest() . Cela vous permet d'invoquer une fonction via les méthodes HTTP prises en charge suivantes : GET , POST , PUT , DELETE et OPTIONS .

Options HTTP supplémentaires

Option La description
region Les fonctions HTTP peuvent spécifier un tableau de régions ainsi qu'une seule région. Lorsque plusieurs régions sont spécifiées, une instance de fonction distincte sera déployée pour chaque région.
timeoutSeconds Les fonctions HTTP peuvent spécifier un délai d'expiration pouvant aller jusqu'à une heure.
cors Les fonctions HTTP peuvent spécifier des politiques CORS. Vous pouvez le définir sur true pour autoriser toutes les origines ou une string , une regex ou un array pour spécifier les origines autorisées. La valeur par défaut est false/pas de stratégies CORS si elles ne sont pas explicitement définies.

Configuration de CORS (partage de ressources cross-origin)

Utilisez l'option cors pour contrôler quelles origines peuvent accéder à votre fonction. Par défaut, les fonctions HTTP n'ont pas de CORS configuré, ce qui signifie que toute demande cross-origin à votre fonction entraîne cette erreur :

request has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Vous pouvez également désactiver explicitement CORS en définissant l'option cors sur false pour votre fonction.

Pour autoriser certaines requêtes d'origine croisée, mais pas toutes, vous pouvez transmettre une liste de domaines spécifiques ou d'expressions régulières qui doivent être autorisées. Par exemple, si vous possédez les domaines firebase.com et flutter.com , et que firebase.com peut avoir de nombreux sous-domaines, vous pouvez définir l'option cors sur [/firebase\.com$/, 'flutter.com'] .

Si votre fonction doit être ouvertement disponible, par exemple si elle sert une API publique ou un site Web, définissez la stratégie cors sur true .

Déclencher une fonction avec une requête HTTP

Utilisez onRequest() du firebase-functions/v2/https pour créer une fonction qui gère les événements HTTP. L' onRequest() prend en charge les routeurs et les applications gérés par le framework Web Express .

Les exemples de cette page sont basés sur un exemple de serveur de temps qui se déclenche lorsque vous envoyez une requête HTTP GET au point de terminaison des fonctions. L'exemple de fonction récupère l'heure actuelle du serveur, formate l'heure comme spécifié dans un paramètre de requête d'URL et envoie le résultat dans la réponse HTTP.

Utilisation d'objets de requête et de réponse Express

Utilisé comme arguments pour onRequest() , l'objet Request vous donne accès aux propriétés de la requête HTTP envoyée par le client, et l'objet Response vous donne un moyen de renvoyer une réponse au client.

exports.date = onRequest(
    {timeoutSeconds: 1200, region: ["us-west1", "us-east1"]},
    (req, res) => {
  // ...
});

Utilisation des applications Express existantes

En utilisant App comme argument pour onRequest() , vous pouvez transmettre une application Express complète à une fonction HTTP :

const { onRequest } = require('firebase-functions/v2/https');

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

// 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 = onRequest(app);

Invoquer une fonction HTTP

Après avoir déployé une fonction HTTP, vous pouvez l'invoquer via sa propre URL unique. Utilisez la sortie URL exacte de la CLI après le déploiement.

Par exemple, l'URL pour invoquer date() ressemble à ceci :

https://date-<random-hash>-<region>.a.run.app

Avec le routage d'application express, le nom de la fonction est ajouté en tant que préfixe aux chemins d'URL dans l'application que vous définissez.

Lire les valeurs de la requête

Dans l'exemple de la fonction date() , la fonction teste à la fois le paramètre d'URL et le corps pour une valeur de format afin de définir le format de date/heure à utiliser :

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

Terminer les fonctions HTTP

Terminez toujours une fonction HTTP avec send() , redirect() ou end() . Sinon, votre fonction pourrait continuer à s'exécuter et être arrêtée de force par le système. Voir aussi Sync, Async et Promesses .

Après avoir récupéré et formaté l'heure du serveur à l'aide du module moment Node.js, la fonction date() conclut en envoyant le résultat dans la réponse HTTP :

const formattedDate = moment().format(`${format}`);
logger.log("Sending formatted date:", formattedDate);
res.status(200).send(formattedDate);

Intégration avec l'hébergement Firebase

Vous pouvez connecter une fonction HTTP à Firebase Hosting. Les requêtes sur votre site Firebase Hosting peuvent être transmises par proxy à des fonctions HTTP spécifiques. Cela vous permet également d'utiliser votre propre domaine personnalisé avec une fonction HTTP. En savoir plus sur la connexion de Cloud Functions à Firebase Hosting .