Korzystanie z rozszerzenia konstruktora pakietów Firestore

Rozszerzenie kreatora pakietów Firestore (firestore-bundle-builder) wdraża funkcję HTTP, która obsługuje pakiety danych Cloud Firestore. Pakiety są definiowane w dokumentach Firestore, a rozszerzenie obsługuje pakiet statycznych plików binarnych przez żądania HTTP oraz różne wbudowane mechanizmy buforowania, które korzystają z CDN Hostingu Firebase lub Cloud Storage. Jeśli żaden pakiet nie istnieje lub istniejące pakiety wygasły, ta funkcja na żądanie utworzy nowy pakiet i zapisze go w pamięci podręcznej.

Aby korzystać z tego rozszerzenia, musisz najpierw utworzyć co najmniej 1 specyfikację pakietu w Firestore, korzystając z panelu administracyjnego rozszerzenia. Specyfikacja pakietu określa sposób definiowania zapytań nazwanych (zapytań kolekcji i określonych ścieżek dokumentów, które mają zostać dodane do pakietu).

W specyfikacji pakietu możesz też zdefiniować parametry przeznaczone do użycia w zapytaniach nazwanych. Wartości tych parametrów ustawiasz za pomocą parametrów zapytania URL podczas wywoływania funkcji HTTP.

Powyższy link zawiera instrukcje, które pozwolą Ci uruchomić narzędzia administracyjne lokalnie. Po skonfigurowaniu aplikacji internetowej otwórz adres localhost:3000, aby utworzyć specyfikację za pomocą interfejsu:

przykład

Kompilowanie i przekazywanie pakietu

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

W zależności od specyfikacji pakietu żądany pakiet może być zwracany z pamięci podręcznej klienta, pamięci podręcznej Hostingu Firebase lub pliku w Cloud Storage. Gdy wszystkie bufory wygasną, nowe żądanie wyświetlenia spowoduje wywołanie zapytań Firestore w celu utworzenia pakietu na żądanie.

Możesz skorzystać z możliwości usługi CDN Hostingu Firebase, konfigurując witrynę w Hostingu Firebase, która wskazuje funkcję obsługi za pomocą reguły przepisywania. Sieci CDN replikują Twój 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 zmodyfikuj plik firebase.json o następującej zawartości i wdróż 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 swoich pakietów z CDN za pomocą adresu URL witryny. Na przykład: https://your-site-url.com/bundles/:bundleId.

Jeśli nie chcesz korzystać z Hostingu Firebase, możesz skonfigurować rozszerzenie tak, aby przechowywało dane w Cloud Storage w pamięci podręcznej. W takim przypadku wywołasz bezpośrednio wdrożoną funkcję HTTP w celu wygenerowania pakietów.

Integracja z klientem

Następnie możesz użyć pakietu z interfejsem API loadBundle pakietów SDK Cloud Firestore. Najpierw musisz 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 załadowaniu możesz korzystać z danych z pakietu:

Jeśli podczas definiowania pakietu podano tablicę ścieżek dokumentów, dane dokumentów można pobrać 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 masz określone zapytania, możesz użyć interfejsu API namedQuery, 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ą zdefiniowane jako klucz każdej definicji właściwości queries (patrz poniżej).