Funkcję możesz aktywować za pomocą żądania HTTP, używając funkcji functions.https
. Umożliwia to wywołanie funkcji synchronicznej za pomocą tych obsługiwanych metod HTTP: GET
, POST
, PUT
, DELETE
i OPTIONS
.
Przykłady na tej stronie są oparte na funkcji przykładowej, która jest wywoływana, gdy wysyłasz żądanie HTTP GET
do punktu końcowego funkcji. Przykładowa funkcja pobiera bieżący czas serwera, formatuje go zgodnie z parametrem zapytania w adresie URL i wysyła wynik w odpowiedzi HTTP.
Aktywowanie funkcji za pomocą żądania HTTP
Użyj funkcji functions.https
, aby utworzyć funkcję, która obsługuje zdarzenia HTTP. Obsługa zdarzenia dla funkcji HTTP wykrywa zdarzenie onRequest()
, które obsługuje routery i aplikacje zarządzane przez platformę internetową Express.
Korzystanie z obiektów żądań i odpowiedzi Express
Obiekt Request, który jest używany jako argument funkcji onRequest()
, zapewnia dostęp do właściwości żądania HTTP wysłanego przez klienta, a obiekt Response umożliwia wysłanie odpowiedzi do klienta.
exports.date = functions.https.onRequest((req, res) => { // ... });
Korzystanie z dotychczasowych aplikacji Express
Używając argumentu App w funkcji onRequest()
, możesz przekazać całą aplikację Express do funkcji HTTP. Powtarzalny kod można przenieść do oprogramowania pośredniczącego w ten sposób:
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ą jej własnego adresu URL. Adres URL zawiera w kolejności:
- Region (lub regiony), w których została wdrożona funkcja. Niektóre funkcje produkcyjne mogą wymagać jawnego ustawienia lokalizacji w celu zminimalizowania opóźnień w sieci.
- Identyfikator projektu Firebase
cloudfunctions.net
- Nazwa funkcji
Adres URL wywołania date()
może wyglądać na przykład tak:
https://us-central1-<project-id>.cloudfunctions.net/date
Jeśli podczas wdrażania funkcji wystąpią błędy uprawnień, sprawdź, czy użytkownik uruchamiający polecenia wdrażania ma przypisane odpowiednie role uprawnień.
W przypadku szybkiego kierowania aplikacji nazwa funkcji jest dodawana jako prefiks do ścieżek URL w określonej przez Ciebie aplikacji. Na przykład adres URL wywołania gettera w przykładzie aplikacji Express wygląda tak:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
Jeśli wywołujesz funkcje HTTP za zaporą sieciową lub filtrem adresów IP, możesz wyszukiwać adresy IP, których Google używa do obsługi funkcji HTTP.
Korzystanie z modułów pośredniczących w Cloud Functions
Jeśli chcesz wstrzyknąć zależności pośrednie do obsługi plików cookie lub CORS, wywołaj je w ramach funkcji. Aby na przykład włączyć obsługę CORS, dodaj ten blok:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
Odczytywanie wartości z żądania
W tabeli poniżej 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; zobacz dokumentację Node.js Buffer). |
text/plain |
„mój tekst” | request.body jest równe „mój tekst”. |
application/x-www-form-urlencoded |
'name=John' | request.body.name to „Jan”. |
Parsowanie jest wykonywane przez te moduły parsowania treści:
- Parsowanie treści w formacie JSON
- Parser treści nieprzetworzonej
- Parsowanie tekstu
- Parsowanie treści formularza zakodowanego w formacie URL
Załóżmy, że Twoja funkcja jest wywoływana z taką prośbą:
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'
wtedy wysłane dane zostaną zmaterializowane w ramach:
Właściwość/metoda | Wartość |
---|---|
req.method |
„POST” |
req.get('x-myheader') |
„123”. |
req.query.foo |
„baz” |
req.body.text |
„coś” |
req.rawBody |
Nieprzetworzone bajty żądania |
W przykładzie funkcji date()
funkcja sprawdza zarówno parametr adresu URL, jak i tekst w polu „body” pod kątem wartości format
, aby ustawić format daty/godziny:
let format = req.query.format; format = req.body.format;
Zamykanie funkcji HTTP
Funkcje HTTP zawsze kończ się za pomocą send()
, redirect()
lub end()
. W przeciwnym razie funkcja może nadal działać i zostać przymusowo zakończona przez system. Zobacz też Synchronizacja, asynchroniczność i obietnice.
Po pobraniu i sformatowaniu czasu serwera za pomocą modułu Node.js moment
funkcja date()
kończy się wysłaniem 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 Firebase Hosting
Funkcję HTTP możesz połączyć z Firebase Hosting. Żądania w witrynie Firebase Hosting mogą być przekierowywane do określonych funkcji HTTP. Pozwala też używać własnej domeny niestandardowej z funkcją HTTP. Dowiedz się więcej o łączeniu Cloud Functions z Firebase Hosting.