Firestore Bundle Builder Uzantısı'nı kullanma

Firestore Bundle Builder (firestore-bundle-builder) uzantısı, Cloud Firestore veri paketleri sunan bir HTTP işlevi dağıtır. Paketleri Firestore belgelerinde tanımlarsınız ve uzantı, Firebase Hosting CDN veya Cloud Storage'ı kullanarak çeşitli yerleşik önbelleğe alma mekanizmalarının yanı sıra HTTP istekleri aracılığıyla statik ikili dosya veri paketini sunar. Paket yoksa veya mevcut paketlerin süresi dolmuşsa bu işlev, isteğe bağlı olarak yeni bir paket oluşturup önbelleğe alır.

Bu uzantıyı kullanmak için öncelikle uzantının yönetici kontrol panelini kullanarak Firestore'da bir veya daha fazla paket spesifikasyonu oluşturmanız gerekir. Paket spesifikasyonu, adlandırılmış sorguları (koleksiyon sorguları ve pakete eklenecek belirli belge yolları) tanımlama şeklinizdir.

Paket spesifikasyonunda, adlandırılmış sorgularda kullanılmak üzere parametreler de tanımlayabilirsiniz. HTTP işlevini çağırdığınızda URL sorgu parametrelerini kullanarak bu parametrelerin değerlerini ayarlarsınız.

Yukarıdaki bağlantıda, yönetici yardımcı programlarını yerel olarak çalıştırmanıza yardımcı olacak bazı talimatlar verilmektedir. Web uygulamasını kurduktan sonra, kullanıcı arayüzünü kullanarak bir spesifikasyon oluşturmak için localhost:3000'e gidin:

örnek

Paketi oluşturma ve sunma

Uzantıyı yükleyip bir paket spesifikasyonu oluşturduktan sonra, uzantı tarafından sağlanan HTTP uç noktasını çağırarak paket oluşturmaya ve yayınlamaya başlayabilirsiniz.

İstenen paket, paket spesifikasyonuna bağlı olarak istemcinin önbelleğinden, Firebase Hosting önbelleğinden veya bir Cloud Storage dosyasından döndürülebilir. Tüm önbelleklerin süresi dolduğunda, yeni bir yayın isteği, paketi isteğe bağlı olarak oluşturmak için Firestore sorgularını tetikler.

Yeniden yazma kuralı kullanarak serve işlevini işaret eden bir Firebase Hosting sitesi oluşturarak Firebase Hosting CDN'nin özelliklerinden yararlanabilirsiniz. CDN'ler, paketinizin kopyasını birçok farklı sunucuya dağıtır. Böylece kullanıcılarınız paketi en yakın sunucudan otomatik olarak yükleyebilir. Tercih edilen yaklaşım budur.

Bu özelliği Firebase Hosting'de ayarlamak için aşağıdaki içeriklere sahip bir firebase.json dosyası oluşturun veya düzenleyin ve siteyi dağıtın:

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

Dağıtım tamamlandıktan sonra site URL'nizi kullanarak paketlerinize CDN'den erişebilirsiniz. Örneğin: https://your-site-url.com/bundles/:bundleId.

Alternatif olarak, Firebase Hosting'i kullanmak istemiyorsanız uzantıyı verileri Cloud Storage'da önbelleğe alacak şekilde yapılandırabilirsiniz. Bu durumda, paket oluşturmak için dağıtılan HTTP işlevini doğrudan çağırırsınız.

İstemci Entegrasyonu

Ardından, Cloud Firestore SDK'larının loadBundle API'si ile paketi kullanabilirsiniz. Önce paketin indirilmesi, ardından SDK'ya sağlanması gerekir. Örneğin:

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

Yüklendikten sonra paketteki verileri kullanabilirsiniz:

Paketi tanımlarken bir dizi doküman yolu belirttiyseniz doküman verilerini paket aracılığıyla istemcinizde alabilirsiniz:

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

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

Sorgu belirttiyseniz paketteki bir sorguyu çalıştırmak için namedQuery API'sini kullanabilirsiniz:

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

Sorgu kimlikleri, her bir queries özellik tanımının anahtarı olarak tanımlanır (aşağıya bakın).