Wywoływanie funkcji za pomocą żądań HTTP


Funkcję możesz aktywować za pomocą żądania HTTP za pomocą polecenia functions.https Dzięki temu możesz wywoływać funkcję synchroniczną za pomocą te obsługiwane metody HTTP: GET, POST, PUT, DELETE i OPTIONS.

Przykłady na tej stronie oparte na: funkcja przykładowa uruchamiany, gdy wysyłasz żądanie HTTP GET do punktu końcowego funkcji. Funkcja przykładowa pobiera bieżący czas serwera i formatuje godzinę zgodnie z zapytaniem adresu URL i wysyła wynik w odpowiedzi HTTP.

Aktywowanie funkcji za pomocą żądania HTTP

Użyj formatu functions.https aby utworzyć funkcję, która obsługuje HTTP zdarzeń. Moduł obsługi zdarzeń funkcji HTTP nasłuchuje onRequest(), który obsługuje routery i aplikacje zarządzane przez platformę internetową Express.

Korzystanie z obiektów ekspresowych żądań i odpowiedzi

Używany jako argumenty funkcji onRequest(), obiekt Request zapewnia dostęp do właściwości żądania HTTP wysłanego przez klienta oraz Obiekt Response daje Ci możliwość wysłać odpowiedź klientowi.

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

Korzystanie z istniejących aplikacji Express

Używanie App jako argumentu onRequest(), możesz przekazać pełną aplikację ekspresową do funkcji HTTP. Kod stały można przenieść do oprogramowania pośredniczącego, jak pokazano poniżej:

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

Wywoływanie funkcji HTTP

Po wdrożeniu funkcji HTTP możesz ją wywołać za pomocą własnej Adres URL. Adres URL zawiera te elementy w kolejności:

  • Region (lub regiony), w którym wdrożono funkcję. Niektóre produkcje funkcje mogą wymagać wyraźnego ustawienia atrybutu lokalizacja w celu zminimalizowania opóźnień sieciowych.
  • Identyfikator Twojego projektu Firebase
  • cloudfunctions.net
  • Nazwa funkcji

Na przykład URL wywołujący date() wygląda tak:

https://us-central1-<project-id>.cloudfunctions.net/date

Jeśli podczas wdrażania funkcji wystąpią błędy uprawnień, upewnij się, odpowiednie role uprawnień są przypisaną do użytkownika wykonującego polecenia wdrożeniowe.

W przypadku szybkiego routingu aplikacji nazwa funkcji jest dodawana jako prefiks do ścieżek adresów URL w określonej aplikacji. Na przykład adres URL do wywoływania metody getter w ekspresowym przykład aplikacji powyżej wygląda tak:

https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>

Jeśli wywołujesz funkcje HTTP za zaporą sieciową lub filtrem IP, możesz sprawdzić adresy IP, których Google używa do obsługi funkcji HTTP.

Używanie modułów oprogramowania pośredniczącego w Cloud Functions

Jeśli musisz wstrzyknąć zależności oprogramowania pośredniczącego np. w obsłudze plików cookie czy CORS, wywołaj je w funkcji. Aby na przykład włączyć obsługę CORS, dodaj następujący blok:

// Enable CORS using the `cors` express middleware.
cors(req, res, () => {
  // ...
});

Odczytaj wartości z żądania

W poniższej tabeli znajdziesz kilka typowych scenariuszy:

Typ treści Treść żądania Zachowanie
application/json '{"name":"John"}' request.body.name to „Jan”
application/octet-stream „mój tekst” request.body równa się „6d792074657874” (nieprzetworzone bajty żądania; zapoznaj się z dokumentacją bufora Node.js)
text/plain „mój tekst” request.body równa się „mój tekst”
application/x-www-form-urlencoded „name=Jan” request.body.name to „Jan”

Analiza jest wykonywana przez te parsery treści:

Załóżmy, że Twoja funkcja jest wywoływana za pomocą następującego żądania:

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

wówczas wysłane dane będą materializowane w następujący sposób:

Właściwość/metoda Wartość
req.method „POST”
req.get('x-myheader') „123”
req.query.foo „baz”
req.body.text „coś”
req.rawBody Nieprzetworzone (nieprzeanalizowane) bajty żądania

W przykładowej funkcji date() funkcja testuje zarówno parametr URL, treść wartości format, by ustawić format daty/godziny:

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

Zakończ funkcje HTTP

Zawsze kończ funkcję HTTP ciągiem send(), redirect(), lub end(). W przeciwnym razie funkcja może być nadal uruchomiona może zostać wymuszone przez system. Zobacz też Synchronizacja, asynchronizacja i obietnice.

Po pobraniu i sformatowaniu czasu serwera za pomocą Node.js Moduł moment, funkcja date() kończy się przez wysłanie wyniku w odpowiedzi HTTP:

const formattedDate = moment().format(`${format}`);
functions.logger.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

Łączenie funkcji HTTP z Hostingiem Firebase

Możesz połączyć funkcję HTTP z Hostingiem Firebase. Prośby dotyczące Witrynę Hostingu Firebase można połączyć przez serwer proxy z określonymi funkcjami HTTP. To także umożliwia użycie własnej domeny z funkcją HTTP. Więcej informacji o jak połączyć Cloud Functions z Hostingiem Firebase.