Sie können eine Funktion über eine HTTP-Anfrage mit
functions.https auslösen. So können Sie eine synchrone Funktion mit
den folgenden unterstützten HTTP-Methoden aufrufen: 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, formatiert sie gemäß einem URL-Abfrage
parameter und sendet das Ergebnis in der HTTP-Antwort.
Funktion mit einer HTTP-Anfrage auslösen
Verwenden Sie functions.https
, um eine Funktion zu erstellen, die HTTP
-Ereignisse verarbeitet. Der Ereignishandler für eine HTTP-Funktion wartet auf das
onRequest() Ereignis,
das Router und Apps unterstützt, die von
dem Express Webframework verwaltet werden.
Express-Anfrage- und -Antwortobjekte verwenden
Das Anfrageobjekt wird als Argument für onRequest(),
das Request-Objekt verwendet und bietet
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-App an eine HTTP-Funktion übergeben. Boilerplate-Code kann
wie unten gezeigt in 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 aufrufen. Die URL enthält die folgenden Elemente in dieser Reihenfolge:
- Die Region (en), in der bzw. denen Sie Ihre Funktion bereitgestellt haben. Bei einigen Produktions funktionen muss der Standort explizit festgelegt werden, 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, prüfen Sie, ob dem Nutzer, der die Bereitstellungsbefehle ausführt, die entsprechenden IAM-Rollen zugewiesen sind.
Bei der Express-App-Weiterleitung wird der Funktionsname als Präfix zu den URL-Pfaden in der von Ihnen definierten App hinzugefügt. Die URL zum Aufrufen des Getters im obigen Beispiel für eine Express App sieht beispielsweise so aus:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
Middleware-Module mit Cloud Functions verwenden
Wenn Sie Middleware-Abhängigkeiten für Dinge wie Cookie-Unterstützung oder CORS einfügen müssen, rufen Sie diese in der Funktion auf. Fügen Sie beispielsweise den folgenden Block hinzu, um die CORS-Unterstützung zu aktivieren:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
Werte aus der Anfrage lesen
In der folgenden Tabelle sind einige häufige Szenarien aufgeführt:| Inhaltstyp | Anfragetext | Verhalten |
|---|---|---|
application/json |
'{"name":"John"}' |
request.body.name ist gleich „John“ |
application/octet-stream |
'my text' | request.body ist gleich „6d792074657874“ (die Rohbytes der Anfrage; siehe die Node.js-Buffer-Dokumentation) |
text/plain |
'my text' | request.body ist gleich „my text“ |
application/x-www-form-urlencoded |
'name=John' | request.body.name ist gleich „John“ |
Diese Analyse wird von den folgenden Body-Parsern 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"}'
Dann werden die gesendeten Daten unter folgendem Pfad materialisiert:
| Attribut/Methode | Wert |
|---|---|
req.method |
"POST" |
req.get('x-myheader') |
"123" |
req.query.foo |
"baz" |
req.body.text |
"something" |
req.rawBody |
Die Rohbytes (nicht analysiert) der Anfrage |
Im Beispiel der date() Funktion testet die Funktion sowohl den URL-Parameter als auch
den Text auf einen format Wert, um das zu verwendende Datums-/Zeitformat festzulegen:
let format = req.query.format; format = req.body.format;
HTTP-Funktionen beenden
Beenden Sie eine HTTP-Funktion immer mit send(), redirect(),
oder end(). Andernfalls wird die Funktion möglicherweise weiter ausgeführt und vom System
zwangsweise beendet. Weitere Informationen finden Sie unter
Synchron, asynchron und Promises.
Nachdem die Serverzeit mit dem Node.js
moment-Modul abgerufen und formatiert wurde, wird das Ergebnis von der Funktiondate()
in der HTTP-Antwort gesendet:
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 verbinden. Anfragen auf Ihrer Firebase Hosting Website können 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.