Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Rufen Sie Funktionen über HTTP-Anfragen auf

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Sie können eine Funktion über eine HTTP-Anfrage auslösen, indem Sie functions.https verwenden. Dadurch 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 -Anforderung an den Funktionsendpunkt senden. Die Beispielfunktion ruft die aktuelle Serverzeit ab, formatiert die Zeit wie in einem URL-Abfrageparameter angegeben und sendet das Ergebnis in der HTTP-Antwort.

Lösen Sie eine Funktion mit einer HTTP-Anfrage aus

Verwenden Sie functions.https , um eine Funktion zu erstellen, die HTTP-Ereignisse verarbeitet. Der Ereignishandler für eine HTTP-Funktion wartet auf das Ereignis onRequest() , das Router und Apps unterstützt, die vom Express -Webframework verwaltet werden.

Verwenden von Express-Anforderungs- und -Antwortobjekten

Das Request -Objekt, das als Argumente für onRequest() verwendet wird, gibt Ihnen Zugriff auf die Eigenschaften der vom Client gesendeten HTTP-Anfrage, und das Response -Objekt gibt Ihnen die Möglichkeit, eine Antwort an den Client zurückzusenden.

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

Verwenden vorhandener Express-Apps

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 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);

Rufen Sie eine HTTP-Funktion auf

Nachdem Sie eine HTTP-Funktion bereitgestellt haben, können Sie sie über ihre eigene eindeutige URL aufrufen. Die URL enthält Folgendes in dieser Reihenfolge:

  • Die Region (oder Regionen), in der Sie Ihre Funktion bereitgestellt haben. Einige Produktionsfunktionen müssen den Standort möglicherweise explizit festlegen, 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, stellen Sie sicher, dass dem Benutzer, 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 Beispiel der Express-App 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 nachschlagen, die Google verwendet, um HTTP-Funktionen bereitzustellen.

Verwenden Sie Middleware-Module mit Cloud Functions

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. Um beispielsweise die CORS-Unterstützung zu aktivieren, 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 gängige Szenarien aufgeführt:

Inhaltstyp Körper anfordern Verhalten
application/json '{"name":"John"}' request.body.name ist gleich 'John'
application/octet-stream 'mein Text' request.body entspricht '6d792074657874' (die rohen Bytes der Anfrage; siehe Node.js Buffer-Dokumentation )
text/plain 'mein Text' request.body ist gleich '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 Anforderung aufgerufen:

curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'

dann würden die gesendeten Daten materialisiert unter:

Eigenschaft/Methode Wert
req.method "POST"
req.get('x-myheader') "123"
req.query.foo "baz"
req.body.text "etwas"
req.rawBody Die rohen (ungeparsten) Bytes der Anfrage

Im Funktionsbeispiel date() testet die Funktion sowohl den URL-Parameter als auch den Hauptteil auf einen format , 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 Ihre Funktion möglicherweise weiter ausgeführt und vom System zwangsweise beendet. Siehe auch Sync, Async und Promises .

Nach dem Abrufen und Formatieren der Serverzeit mit dem moment -Modul von Node.js schließt die Funktion date() ab, indem sie das Ergebnis in der HTTP-Antwort sendet:

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-Site können an bestimmte HTTP-Funktionen weitergeleitet werden. Auf diese Weise können Sie auch Ihre eigene benutzerdefinierte Domäne mit einer HTTP-Funktion verwenden. Erfahren Sie mehr über das Verbinden von Cloud Functions mit Firebase Hosting .