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 Funktionsendpunkt senden. Die Beispielfunktion ruft die aktuelle Serverzeit ab, formatiert die Zeit wie in einem URL-Suchparameter angegeben 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 Anwendungen unterstützt, die vom Web-Framework Express verwaltet werden.

Express-Anfrage- und -Antwortobjekte verwenden

Das Request-Objekt wird als Argument für onRequest() verwendet und ermöglicht Ihnen den Zugriff auf die Attribute der vom Client gesendeten HTTP-Anfrage. Mit dem Response-Objekt können Sie eine Antwort an den Client senden.

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 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 (oder Regionen), in der 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-Anwendungsrouting wird der Funktionsname als Präfix zu den URL-Pfaden in der von Ihnen definierten Anwendung hinzugefügt. Die URL zum Aufrufen des Getters im obigen Express-Anwendungsbeispiel 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 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. 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 entspricht „6d792074657874“ (die Rohbytes der Anfrage; siehe Node.js-Pufferdokumentation)
text/plain 'my text' request.body entspricht „mein Text“
application/x-www-form-urlencoded 'name=John' request.body.name ist gleich „John“

Dieses Parsen 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 "etwas"
req.rawBody Die Rohbyte (nicht geparst) der Anfrage

Im Beispiel für die Funktion date() werden sowohl der URL-Parameter als auch der Text auf einen format-Wert geprüft, um das zu verwendende Datums-/Uhrzeitformat 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-Modul moment abgerufen und formatiert wurde, wird die Funktion date() abgeschlossen, indem das Ergebnis in der HTTP-Antwort gesendet wird:

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