Funktionen über HTTP-Anfragen aufrufen (1. Generation)

Sie können eine Funktion über eine HTTP-Anfrage mit functions.https auslösen. So können Sie eine synchrone Funktion über die 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-Suchparameter 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 Event-Handler für eine HTTP-Funktion wartet auf das Ereignis onRequest(), das Router und Apps unterstützt, die vom Express-Web-Framework verwaltet werden.

Express-Anfrage- und ‑Antwortobjekte verwenden

Das Request-Objekt wird als Argument für onRequest() verwendet und bietet Zugriff auf die Eigenschaften der vom Client gesendeten HTTP-Anfrage. Das Response-Objekt ermöglicht es, eine Antwort an den Client zurückzusenden.

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. Der Boilerplate-Code kann wie unten 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 aufrufen. Die URL enthält Folgendes in der angegebenen Reihenfolge:

  • Die Region (en), in der bzw. denen Sie Ihre Funktion bereitgestellt haben. Bei einigen Produktionsfunktionen muss der Standort möglicherweise 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.

Beim Express-App-Routing 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 Express-App-Beispiel sieht 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 die IP-Adressen, die Google zum Bereitstellen von HTTP-Funktionen verwendet, nachschlagen.

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 innerhalb der Funktion auf. Wenn Sie beispielsweise die CORS-Unterstützung aktivieren möchten, fügen Sie den folgenden Block hinzu:

// 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 entspricht „John“
application/octet-stream „mein Text“ request.body entspricht „6d792074657874“ (den Rohbytes der Anfrage; siehe Node.js-Buffer-Dokumentation)
text/plain „mein Text“ request.body entspricht „mein Text“
application/x-www-form-urlencoded 'name=John' request.body.name entspricht „John“

Das Parsen erfolgt durch die folgenden Body-Parser:

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 Rohbyte (nicht geparst) der Anfrage

Im Beispiel für die Funktion date() wird sowohl der URL-Parameter als auch der Textkörper auf einen format-Wert geprüft, um das zu verwendende Datums-/Zeitformat festzulegen:

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

HTTP-Funktionen beenden

Beenden Sie HTTP-Funktionen immer mit send(), redirect() oder end(). Andernfalls wird Ihre Funktion möglicherweise weiter ausgeführt und vom System beendet. Siehe auch Sync, Async and Promises.

Nachdem die Serverzeit mit dem Node.js-Modul moment abgerufen und formatiert wurde, wird das Ergebnis mit der Funktion date() 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