Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Funktionen über HTTP-Anfragen aufrufen

Sie können eine Funktion über eine HTTP-Anforderung mithilfe von functions.https auslösen. Auf diese Weise können Sie eine synchrone Funktion über die folgenden unterstützten HTTP-Methoden aufrufen: GET , POST , PUT , DELETE und OPTIONS .

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 in einem URL-Abfrageparameter angegebene Zeit und sendet das Ergebnis in der HTTP-Antwort.

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

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

Verwenden von Express-Anforderungs- und Antwortobjekten

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

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

Vorhandene Express-Apps verwenden

Mit App als Argument für onRequest() können Sie eine vollständige Express-App an eine HTTP-Funktion übergeben. Der 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);

Rufen Sie eine HTTP-Funktion auf

Nachdem Sie eine HTTP-Funktion bereitgestellt haben, können Sie sie über eine eigene eindeutige URL aufrufen. Die URL enthält die folgende 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 folgendermaßen 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 Express-App-Beispiel sieht beispielsweise folgendermaßen 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 zur Bereitstellung von HTTP-Funktionen verwendet.

Verwenden Sie Middleware-Module mit Cloud-Funktionen

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.
return cors(req, res, () => {
  // ...
});

Lesen Sie die Werte aus der Anforderung

In der folgenden Tabelle sind einige gängige Szenarien aufgeführt:

Inhaltstyp Text anfordern Verhalten
application/json '{"name":"John"}' request.body.name entspricht 'John'
application/octet-stream 'mein Text' request.body entspricht '6d792074657874' (die Rohbytes der Anfrage; siehe die Node.js-Pufferdokumentation )
text/plain 'mein Text' request.body entspricht 'mein Text'
application/x-www-form-urlencoded 'name = John' request.body.name entspricht 'John'

Diese Analyse 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 (nicht analysierten) Bytes der Anforderung

Im Funktionsbeispiel date() testet die Funktion sowohl den URL-Parameter als auch den Body auf einen format , um das zu verwendende Datums- / Uhrzeitformat festzulegen:

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

Beenden Sie HTTP-Funktionen

Beenden Sie eine HTTP-Funktion immer mit send() , redirect() oder end() . Andernfalls wird Ihre Funktion möglicherweise weiterhin ausgeführt und vom System zwangsweise beendet. Siehe auch Synchronisieren, Asynchronisieren und Versprechen .

Nach dem Abrufen und Formatieren der Serverzeit mit dem Momentmodul Node.js moment die Funktion date() abgeschlossen, indem das Ergebnis in der HTTP-Antwort gesendet wird:

const formattedDate = moment().format(format);
console.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

Verbinden von HTTP-Funktionen mit Firebase-Hosting

Sie können eine HTTP-Funktion mit Firebase Hosting verbinden. Anforderungen auf Ihrer Firebase-Hosting-Site können an bestimmte HTTP-Funktionen weitergeleitet werden. Auf diese Weise können Sie auch Ihre eigene benutzerdefinierte Domain mit einer HTTP-Funktion verwenden. Weitere Informationen zum Verbinden von Cloud-Funktionen mit Firebase-Hosting .