Memanggil fungsi melalui permintaan HTTP

Anda dapat memicu fungsi melalui permintaan HTTP menggunakan functions.https. Dengan cara ini, Anda dapat mengaktifkan fungsi sinkron melalui metode HTTP yang didukung berikut: GET, POST, PUT, DELETE, dan OPTIONS.

Contoh di halaman ini didasarkan pada fungsi sampel yang terpicu saat Anda mengirimkan permintaan GET HTTP ke endpoint fungsi. Fungsi sampel tersebut mengambil waktu server saat ini, memformat waktu seperti yang ditentukan dalam parameter kueri URL, lalu mengirimkan hasilnya dalam respons HTTP.

Memicu fungsi dengan permintaan HTTP

Gunakan functions.https untuk membuat fungsi yang menangani peristiwa HTTP. Pengendali peristiwa untuk fungsi HTTP akan memproses peristiwa onRequest(), yang mendukung router dan aplikasi yang dikelola oleh framework web Express.

Menggunakan objek request dan response Express

Digunakan sebagai argumen untuk onRequest(), objek Requestdapat Anda gunakan untuk mengakses properti permintaan HTTP yang dikirimkan oleh klien, dan objek Response dapat Anda gunakan untuk mengirimkan respons kembali ke klien.

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

Menggunakan aplikasi Express yang ada

Dengan menggunakan Aplikasi sebagai argumen untuk onRequest(), Anda dapat meneruskan aplikasi Express lengkap ke fungsi HTTP. Kode boilerplate dapat dipindahkan ke middleware seperti ditunjukkan di bawah ini:

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

Memanggil fungsi HTTP

Setelah fungsi HTTP diterapkan, Anda dapat memanggilnya melalui URL uniknya sendiri. Secara berurutan, URL tersebut mencakup hal-hal berikut:

  • Region tempat Anda men-deploy fungsi. Beberapa fungsi produksi mungkin perlu menetapkan lokasi secara eksplisit untuk meminimalkan latensi jaringan.
  • Project ID Firebase Anda
  • cloudfunctions.net
  • Nama fungsi Anda

Misalnya, URL untuk memanggil date() akan terlihat seperti ini:

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

Dengan perutean aplikasi Express, nama fungsi ditambahkan sebagai awalan ke jalur URL pada aplikasi yang Anda tetapkan. Misalnya, URL untuk memanggil getter dalam contoh aplikasi Express di atas akan terlihat seperti ini:

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

Menggunakan modul middleware dengan Cloud Functions

Jika Anda perlu menginjeksikan dependensi middleware untuk hal-hal seperti dukungan cookie atau CORS, panggil blok berikut dalam fungsi tersebut. Misalnya, untuk mengaktifkan dukungan CORS, tambahkan blok berikut:

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

Membaca nilai dari permintaan

Tabel berikut mencantumkan beberapa skenario umum:

Jenis Konten Isi Request Perilaku
application/json '{"name":"John"}' request.body.name sama dengan 'John'
application/octet-stream 'my text' request.body sama dengan '6d792074657874' (byte mentah permintaan; baca dokumentasi Buffer Node.js)
text/plain 'my text' request.body sama dengan 'my text'
application/x-www-form-urlencoded 'name=John' request.body.name sama dengan 'John'

Penguraian ini dilakukan oleh parser isi berikut:

Katakanlah fungsi Anda dipanggil dengan permintaan berikut:

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

maka data yang dikirim akan terwujud dalam:

Properti/Metode Nilai
req.method "POST"
req.get('x-myheader') "123"
req.query.foo "baz"
req.body.text "something"
req.rawBody Byte mentah (tidak terurai) dari permintaan

Pada contoh fungsi date(), fungsi tersebut menguji parameter URL dan isinya terhadap suatu nilai format untuk menyetel 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);
console.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

Menghubungkan Fungsi HTTP ke 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 khusus sendiri dengan fungsi HTTP. Pelajari lebih lanjut cara menghubungkan Cloud Functions ke Firebase Hosting.