Korzystanie z rozszerzenia konstruktora pakietów Firestore

Rozszerzenie Firestore Bundle Builder (firestore-bundle-builder) wdraża funkcję HTTP, która udostępnia pakiety danych Cloud Firestore. Pakiety definiujesz w dokumentach Firestore, a rozszerzenie udostępnia statyczny pakiet danych w postaci pliku binarnego za pomocą żądań HTTP oraz różnych wbudowanych mechanizmów buforowania przy użyciu CDN Hostingu Firebase lub Cloud Storage. Gdy pakiet nie istnieje lub istniejące pakiety wygasły, ta funkcja utworzy i zapisze w pamięci podręcznej nowy pakiet na żądanie.

Aby korzystać z tego rozszerzenia, musisz najpierw utworzyć co najmniej 1 specyfikację pakietu w Firestore za pomocą panelu administracyjnego rozszerzenia. Specyfikacja pakietu określa, jak definiować nazwane zapytania (zapytania do kolekcji i konkretne ścieżki dokumentów, które mają zostać dodane do pakietu).

W specyfikacji pakietu możesz też zdefiniować parametry, które mają być używane w nazwanych zapytaniach. Wartości tych parametrów ustawiasz za pomocą parametrów zapytania URL, gdy wywołujesz funkcję HTTP.

W linku powyżej znajdziesz instrukcje, które pozwolą Ci uruchomić narzędzia administracyjne lokalnie. Gdy skonfigurujesz aplikację internetową, otwórz adres localhost:3000, aby utworzyć specyfikację za pomocą interfejsu:

przykład

Tworzenie i udostępnianie pakietu

Po zainstalowaniu rozszerzenia i utworzeniu specyfikacji pakietu możesz zacząć tworzyć i udostępniać pakiety, wywołując punkt końcowy HTTP udostępniany przez rozszerzenie.

W zależności od specyfikacji pakietu żądany pakiet może zostać zwrócony z pamięci podręcznej klienta, pamięci podręcznej Hostingu Firebase lub pliku Cloud Storage. Gdy wszystkie pamięci podręczne wygasną, nowe żądanie udostępnienia spowoduje wywołanie zapytań Firestore w celu utworzenia pakietu na żądanie.

Możesz korzystać z funkcji CDN Hostingu Firebase, konfigurując witrynę w Hostingu Firebase, która będzie wskazywać funkcję udostępniania za pomocą reguły przekierowania. Sieci CDN replikują pakiet na wielu różnych serwerach, dzięki czemu użytkownicy mogą automatycznie wczytywać pakiet z najbliższego serwera. Jest to preferowane podejście.

Aby skonfigurować to w Hostingu Firebase, utwórz lub edytuj plik firebase.json z tą zawartością i wdroż witrynę:

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

Po wdrożeniu możesz uzyskać dostęp do pakietów z CDN za pomocą adresu URL witryny. Na przykład: https://your-site-url.com/bundles/:bundleId.

Możesz też skonfigurować rozszerzenie tak, aby buforowało dane w Cloud Storage, jeśli nie chcesz używać Hostingu Firebase. W takim przypadku będziesz wywoływać wdrożoną funkcję HTTP bezpośrednio, aby generować pakiety.

Integracja z klientem

Następnie możesz użyć pakietu za pomocą interfejsu loadBundle API pakietów SDK Cloud Firestore. Najpierw trzeba pobrać pakiet, a potem przekazać go do pakietu SDK. Przykład:

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

Po wczytaniu możesz używać danych z pakietu:

Jeśli podczas definiowania pakietu określono tablicę ścieżek dokumentów, możesz pobrać dane dokumentu na kliencie za pomocą pakietu:

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

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

Jeśli określono zapytania, możesz użyć interfejsu namedQuery API, aby uruchomić zapytanie z pakietu:

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

Identyfikatory zapytań są definiowane jako klucz każdej definicji właściwości queries (patrz poniżej).