Mit functions.https
können Sie eine Funktion über eine HTTP-Anfrage auslösen. So können Sie eine synchrone Funktion über
die folgenden unterstützten HTTP-Methoden: GET
, POST
, PUT
, DELETE
und
OPTIONS
Die Beispiele auf dieser Seite basieren auf einer Beispielfunktion, die ausgelöst wird, wenn Sie eine HTTP-GET
-Anfrage an den Endpunkt der Funktion senden. Die Beispielfunktion
ruft die aktuelle Serverzeit ab und formatiert die Zeit wie in einer URL-Anfrage angegeben.
und sendet das Ergebnis in der HTTP-Antwort.
Funktion mit einer HTTP-Anfrage auslösen
functions.https
verwenden
um eine Funktion zu erstellen,
die HTTP-Traffic verarbeitet,
Ereignisse. Der Ereignis-Handler für eine HTTP-Funktion wartet auf das Ereignis
Ereignis onRequest()
,
die Router und Apps unterstützt, die von
das Web-Framework Express.
Express-Anfrage- und Antwortobjekte verwenden
Wenn das Request-Objekt als Argument für onRequest()
verwendet wird, erhalten Sie Zugriff auf die Eigenschaften der vom Client gesendeten HTTP-Anfrage. Mit dem Response-Objekt können Sie eine Antwort an den Client zurücksenden.
exports.date = functions.https.onRequest((req, res) => { // ... });
Vorhandene Express-Apps verwenden
Wenn Sie App als Argument für onRequest()
verwenden, können Sie eine vollständige Express-Anwendung an eine HTTP-Funktion übergeben. Boilerplate-Code kann wie hier gezeigt in die Middleware verschoben werden:
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);
HTTP-Funktion aufrufen
Nachdem Sie eine HTTP-Funktion bereitgestellt haben, können Sie sie über ihre eigene eindeutige URL Die URL enthält in der Reihenfolge Folgendes:
- Die Region oder Regionen, in denen Sie Ihre Funktion bereitgestellt haben. Etwas in der Produktion müssen Funktionen möglicherweise den location um die Netzwerklatenz zu minimieren.
- Ihre Firebase-Projekt-ID
cloudfunctions.net
- Der Name Ihrer Funktion
Die URL zum Aufrufen von date()
sieht beispielsweise so aus:
https://us-central1-<project-id>.cloudfunctions.net/date
Wenn beim Bereitstellen von Funktionen Berechtigungsfehler auftreten, achten Sie darauf, dass Die entsprechenden IAM-Rollen sind die dem Nutzer zugewiesen sind, der die Bereitstellungsbefehle ausführt.
Bei der Express-App-Weiterleitung wird der Funktionsname den URL-Pfaden in der von Ihnen definierten App als Präfix hinzugefügt. Die URL zum Aufrufen des Getters in der Beispiel-Express-Anwendung oben sieht beispielsweise so aus:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
Wenn Sie HTTP-Funktionen hinter einer Firewall oder einem IP-Filter aufrufen, können Sie nachschlagen, Die IP-Adressen, die Google zum Bereitstellen von HTTP-Funktionen verwendet.
Middleware-Module mit Cloud Functions verwenden
Wenn Sie Middleware-Abhängigkeiten wie Cookie-Unterstützung oder CORS, rufen Sie diese innerhalb der Funktion auf. Um beispielsweise die CORS-Unterstützung zu aktivieren, fügen Sie folgenden Block:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
Werte aus der Anfrage lesen
In der folgenden Tabelle sind einige gängige Szenarien aufgeführt:Inhaltstyp | Anfragetext | Verhalten |
---|---|---|
application/json |
'{"name":"John"}' |
request.body.name entspricht „John“ |
application/octet-stream |
"mein Text" | request.body entspricht „6d792074657874“ (die Rohbytes der Anfrage; siehe Node.js-Buffer-Dokumentation) |
text/plain |
"mein Text" | request.body ist gleich „mein Text“ |
application/x-www-form-urlencoded |
'name=Max' | request.body.name ist „Max“ |
Dieses Parsen wird von den folgenden Textparsern durchgeführt:
Angenommen, Ihre Funktion wird mit der folgenden Anfrage aufgerufen:
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'
werden die gesendeten Daten unter folgendem Namen materialisiert:
Property/Methode | Wert |
---|---|
req.method |
"POST" |
req.get('x-myheader') |
„123“ |
req.query.foo |
„baz“ |
req.body.text |
„etwas“ |
req.rawBody |
Die (nicht geparsten) Rohbyte der Anfrage |
Im Beispiel der Funktion date()
testet die Funktion sowohl den URL-Parameter als auch
Text für einen format
-Wert, um das zu verwendende Datums-/Uhrzeitformat festzulegen:
let format = req.query.format; format = req.body.format;
HTTP-Funktionen beenden
Eine HTTP-Funktion muss immer mit send()
, redirect()
oder end()
enden. Andernfalls wird Ihre Funktion möglicherweise weiter ausgeführt und vom System zwangsweise beendet. Siehe auch Synchronisieren, asynchron und verspricht.
Nachdem die Serverzeit mit dem Node.js-Modul moment
abgerufen und formatiert wurde, sendet die date()
-Funktion das Ergebnis in der HTTP-Antwort:
const formattedDate = moment().format(`${format}`); functions.logger.log('Sending Formatted date:', formattedDate); res.status(200).send(formattedDate);
HTTP-Funktionen mit Firebase Hosting verbinden
Sie können eine HTTP-Funktion mit Firebase Hosting verknüpfen. Anfragen auf Ihrer Firebase Hosting-Website können per Proxy an bestimmte HTTP-Funktionen weitergeleitet werden. So können Sie auch Ihre eigene benutzerdefinierte Domain mit einer HTTP-Funktion verwenden. Weitere Informationen zum Verbinden von Cloud Functions mit Firebase Hosting