Memanggil fungsi melalui permintaan HTTP

Anda dapat memicu fungsi melalui permintaan HTTP dengan menggunakan functions.https. Ini memungkinkan Anda untuk mengaktifkan fungsi sinkron melalui metode HTTP yang didukung berikut: GET, POST, PUT, DELETE, dan OPTIONS.

Contoh di halaman ini didasarkan pada fungsi sampel yang dipicu saat Anda mengirim 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 mendeteksi peristiwa onRequest(), yang mendukung router dan aplikasi yang dikelola oleh framework web Express.

Menggunakan objek request dan response Express

Sebagai argumen yang digunakan untuk onRequest(), objek Request memberi Anda akses ke properti permintaan HTTP yang dikirim oleh klien, sedangkan objek Response memberi Anda cara untuk mengirimkan respons kembali ke klien.

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

Menggunakan aplikasi Express yang ada

Dengan menggunakan App sebagai argumen untuk onRequest(), Anda dapat meneruskan aplikasi Express lengkap ke sebuah 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);

Mengaktifkan fungsi HTTP

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

  • Region tempat Anda menjalankan 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 mengaktifkan date() terlihat seperti ini:

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

Dengan perutean aplikasi Express, nama fungsi ditambahkan sebagai awalan ke lokasi URL pada aplikasi yang Anda tetapkan. Misalnya, URL untuk mengaktifkan pengambil dalam contoh aplikasi Express di atas 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

Isi permintaan akan diuraikan secara otomatis berdasarkan header content-type, dan tersedia melalui argumen fungsi HTTP Anda.

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 dari permintaan; baca dokumentasi Node.js Buffer)
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 pengurai 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
request.method "POST"
request.get('x-myheader') "123"
request.query.foo "baz"
request.body.text "something"
request.rawBody Permintaan byte mentah (tidak terurai)

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 Sinkronisasi, Asinkronisasi, dan Promise.

Setelah mengambil dan memformat waktu server menggunakan modul moment Node.js, fungsi date() akan diakhiri 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.

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.