Seperti pada generasi ke-1, Anda dapat memicu fungsi melalui permintaan HTTP dengan pengendali onRequest()
. Dengan cara ini, Anda dapat memanggil fungsi melalui metode HTTP yang didukung berikut: GET
, POST
, PUT
, DELETE
, dan OPTIONS
.
Opsi HTTP tambahan
Opsi | Deskripsi |
---|---|
region |
Fungsi HTTP dapat menentukan array beberapa region serta satu region. Jika beberapa region ditentukan, instance fungsi terpisah akan di-deploy untuk setiap region. |
timeoutSeconds |
Fungsi HTTP dapat menentukan waktu tunggu hingga satu jam. |
cors |
Fungsi HTTP dapat menentukan kebijakan CORS. Anda dapat menyetelnya ke true untuk mengizinkan semua asal atau string , regex , atau array untuk menentukan asal yang diizinkan. Kebijakan defaultnya adalah salah/tidak ada CORS jika tidak ditetapkan secara eksplisit. |
Mengonfigurasi CORS (Cross-Origin Resource Sharing)
Gunakan opsi cors
untuk mengontrol sumber mana yang dapat mengakses fungsi Anda. Secara default, fungsi HTTP tidak dikonfigurasi dengan CORS, yang berarti bahwa permintaan lintas asal apa pun ke fungsi Anda akan menyebabkan error ini:
request has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Anda juga dapat menonaktifkan CORS secara eksplisit dengan menetapkan opsi cors
ke false
untuk fungsi Anda.
Untuk mengizinkan beberapa permintaan lintas asal, tetapi tidak semua, Anda dapat meneruskan daftar domain atau ekspresi reguler tertentu yang akan diizinkan. Misalnya, jika
Anda memiliki domain firebase.com
dan flutter.com
, sementara firebase.com
dapat
memiliki banyak subdomain, Anda dapat menyetel opsi cors
ke
[/firebase\.com$/, 'flutter.com']
.
Jika fungsi Anda harus tersedia secara terbuka, misalnya jika menayangkan API atau situs publik, setel kebijakan cors
ke true
.
Memicu fungsi dengan permintaan HTTP
Gunakan onRequest()
dari subpaket firebase-functions/v2/https
untuk membuat fungsi yang menangani peristiwa HTTP.
Peristiwa onRequest()
mendukung router dan aplikasi yang dikelola oleh framework web Express.
Contoh di halaman ini didasarkan pada contoh server waktu yang terpicu saat Anda mengirim permintaan GET
HTTP ke endpoint fungsi. Fungsi contoh tersebut mengambil waktu server saat ini, memformat waktu seperti yang ditentukan dalam parameter kueri URL, lalu mengirimkan hasilnya dalam respons HTTP.
Menggunakan objek request dan response Express
Objek Request yang digunakan sebagai argumen untuk onRequest()
memberikan Anda akses ke properti permintaan HTTP yang dikirimkan oleh klien, dan objek Response dapat Anda gunakan untuk mengirimkan respons kembali ke klien.
exports.date = onRequest( {timeoutSeconds: 1200, region: ["us-west1", "us-east1"]}, (req, res) => { // ... });
Menggunakan aplikasi Express yang ada
Dengan menggunakan App sebagai argumen untuk onRequest()
, Anda dapat meneruskan aplikasi Express lengkap ke fungsi HTTP:
const { onRequest } = require('firebase-functions/v2/https');
const express = require('express');
const app = express();
// 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 = onRequest(app);
Memanggil fungsi HTTP
Setelah fungsi HTTP di-deploy, Anda dapat memanggilnya melalui URL uniknya sendiri. Gunakan output URL yang tepat dari CLI setelah deployment.
Misalnya, URL untuk memanggil date()
akan terlihat seperti ini:
https://date-<random-hash>-<region>.a.run.app
Dengan perutean aplikasi Express, nama fungsi ditambahkan sebagai awalan ke jalur URL pada aplikasi yang Anda tentukan.
Membaca nilai dari permintaan
Pada contoh fungsi date()
, fungsi tersebut menguji parameter URL dan isi untuk menemukan nilai format
agar dapat menetapkan format tanggal/waktu yang akan digunakan:
let format = req.query.format; format = req.body.format;
Menghentikan Fungsi HTTP
Selalu akhiri fungsi HTTP dengan send()
, redirect()
, atau end()
. Jika tidak, fungsi Anda mungkin akan terus berjalan dan dihentikan secara paksa oleh sistem. Baca juga artikel Sinkronisasi, Asinkronisasi, dan Promise.
Setelah mengambil dan memformat waktu server menggunakan modul moment
Node.js, fungsi date()
akan berakhir dengan mengirimkan hasilnya dalam respons HTTP:
const formattedDate = moment().format(`${format}`); logger.log("Sending formatted date:", formattedDate); res.status(200).send(formattedDate);
Integrasi dengan Firebase Hosting
Anda bisa menghubungkan fungsi HTTP ke Firebase Hosting. Permintaan di situs Firebase Hosting Anda dapat di-proxy-kan ke fungsi HTTP tertentu. Anda juga dapat menggunakan domain kustom Anda sendiri dengan fungsi HTTP. Pelajari lebih lanjut cara menghubungkan Cloud Functions ke Firebase Hosting.