Funktionen über HTTP-Anfragen aufrufen


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