Firestore Bundle Builder Uzantısı'nı kullanma

Firestore Bundle Builder (firestore-bundle-builder) uzantısı, Cloud Firestore veri paketlerini sunan bir HTTP işlevi dağıtır. Paketleri Firestore belgelerinde tanımlarsınız. Uzantı, Firebase Hosting CDN veya Cloud Storage'ı kullanan çeşitli yerleşik önbelleğe alma mekanizmalarının yanı sıra statik ikili dosya veri paketini HTTP istekleri aracılığıyla sunar. Hiçbir paket mevcut olmadığında veya mevcut paketlerin süresi dolduğunda bu işlev, istek üzerine 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ı (pakete eklenecek koleksiyon sorguları ve belirli belge yolları) tanımlama şeklinizdir.

Paket spesifikasyonunda, adlandırılmış sorgularda kullanılması amaçlanan parametreleri 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ırabilmeniz için bazı talimatlar verilmiştir. Web uygulamasını ayarladıktan sonra, kullanıcı arayüzünü kullanarak bir spesifikasyon oluşturmak için localhost:3000'e gidin:

örnek

Paketi oluşturma ve yayınlama

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

Paket özelliklerine bağlı olarak, istenen paket 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ınlama isteği, paketi isteğe bağlı olarak oluşturmak için Firestore sorgularını tetikler.

Yeniden yazma kuralından yararlanarak, sunma işlevine yönlendiren bir Firebase Barındırma sitesi oluşturarak Firebase Hosting CDN'nin özelliklerinden yararlanabilirsiniz. CDN'ler, paketinizi birçok farklı sunucuda çoğaltır. Böylece kullanıcılarınız paketi en yakın sunucudan otomatik olarak yükleyebilir. Tercih edilen yaklaşım budur.

Bunu Firebase Hosting'de ayarlamak için aşağıdaki içeriği içeren bir firebase.json dosyası oluşturun veya düzenleyin ve sitesini dağıtın:

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

Dağıtıldı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ı Cloud Storage'da verileri ö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 bir paket kullanabilirsiniz. Paketin önce 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 doküman yolu dizisi belirttiyseniz istemcinizdeki doküman verilerini paket üzerinden 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 paketten sorgu çalıştırmak için namedQuery API'yi kullanabilirsiniz:

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

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