Menggunakan Ekstensi Builder Paket Firestore

Ekstensi Builder Paket Firestore (firestore-bundle-builder) men-deploy fungsi HTTP yang menyalurkan paket data Cloud Firestore. Anda dapat menentukan paket dalam dokumen Firestore, dan ekstensi ini menyalurkan paket data file biner statis melalui permintaan HTTP, beserta berbagai mekanisme caching bawaan menggunakan CDN Firebase Hosting atau Cloud Storage. Jika paket tidak ada atau paket yang sudah ada telah berakhir, fungsi ini akan mem-build paket baru dan menyimpan paket tersebut dalam cache sesuai permintaan.

Untuk menggunakan ekstensi ini, Anda harus membuat satu atau beberapa spesifikasi paket di Firestore terlebih dahulu menggunakan dasbor admin ekstensi. Spesifikasi paket adalah cara Anda menentukan kueri bernama (kueri koleksi dan jalur dokumen tertentu untuk ditambahkan ke paket).

Di dalam spesifikasi paket, Anda juga dapat menentukan parameter yang dimaksudkan untuk digunakan dalam kueri bernama. Anda menetapkan value untuk parameter ini menggunakan parameter kueri URL saat memanggil fungsi HTTP.

Link di atas memberikan beberapa petunjuk agar Anda dapat menjalankan utilitas admin secara lokal. Setelah Anda menyiapkan aplikasi web, buka localhost:3000 untuk membuat spesifikasi menggunakan UI:

contoh

Mem-build dan menyalurkan Paket

Setelah menginstal ekstensi dan membuat spesifikasi paket, Anda dapat mulai mem-build dan menyalurkan paket dengan memanggil endpoint HTTP yang disediakan oleh ekstensi tersebut.

Bergantung pada spesifikasi paket, paket yang diminta mungkin ditampilkan dari cache klien, cache Firebase Hosting, atau file Cloud Storage. Ketika semua cache telah habis masa berlakunya, permintaan penyaluran baru akan memicu kueri Firestore untuk mem-build paket sesuai permintaan.

Anda dapat memanfaatkan kemampuan CDN Firebase Hosting dengan menyiapkan situs Firebase Hosting yang mengarah ke fungsi penyaluran menggunakan aturan penulisan ulang. CDN mereplikasi paket Anda di berbagai server, sehingga pengguna dapat memuat paket dari server terdekat secara otomatis. Ini adalah pendekatan pilihan.

Untuk menyiapkannya di Firebase Hosting, buat atau edit file firebase.json dengan konten berikut dan deploy situs:

{
  "hosting": {
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "/bundles/*",
        "function": "ext-firestore-bundle-builder-serve"
      }
    ]
  }
}

Setelah di-deploy, Anda dapat mengakses paket dari CDN menggunakan URL situs Anda. Misalnya: https://your-site-url.com/bundles/:bundleId.

Atau, Anda dapat mengonfigurasi ekstensi ini untuk menyimpan data ke dalam cache di Cloud Storage jika tidak ingin menggunakan Firebase Hosting. Dalam hal ini, Anda akan memanggil fungsi HTTP yang di-deploy secara langsung untuk membuat paket.

Integrasi Klien

Selanjutnya, Anda dapat menggunakan paket dengan API loadBundle Cloud Firestore SDK. Pertama, paket harus didownload, lalu diberikan ke SDK. Contoh:

import { loadBundle } from "firebase/firestore";

// Download the bundle from the Firebase Hosting CDN:
const bundle = await fetch("/bundles/:bundleId");

// If not using a CDN, download the bundle directly:
// const bundle = await fetch('https://<location>-<project-id>.cloudfunctions.net/ext-firestore-bundle-builder-serve/:bundleId');

await loadBundle(bundle);

Setelah dimuat, Anda dapat menggunakan data dari paket:

Jika Anda menentukan array jalur dokumen saat menentukan paket, Anda bisa mendapatkan data dokumen pada klien melalui paket:

import { getFirestore, doc, getDocFromCache } from "firebase/firestore";
// Bundle Document IDs: ['users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2']

const ref = doc(getFirestore(), "users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2");
const snapshot = await getDocFromCache(ref);

Jika menentukan kueri, Anda dapat menggunakan namedQuery API untuk menjalankan kueri dari paket:

import { getFirestore, namedQuery } from "firebase/firestore";
const query = await namedQuery(getFirestore(), "queryId");
const snapshot = await getDocsFromCache(query);

ID kueri ditentukan sebagai kunci dari setiap definisi properti queries (lihat di bawah).