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 użyć tego rozszerzenia, musisz najpierw utworzyć co najmniej jedną specyfikację pakietu w Firestore przy użyciu 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, które mają być używane w zapytaniach nazwanych. Wartości tych parametrów określa się za pomocą parametrów zapytań w adresach URL przy wywołaniu funkcji HTTP.

Powyższy link zawiera instrukcje, które pozwolą Ci uruchomić narzędzia administracyjne lokalnie. Po skonfigurowaniu aplikacji internetowej przejdź do localhost:3000, aby utworzyć specyfikację przy użyciu 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 udostępniony przez nie punkt końcowy HTTP.

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. Po wygaśnięciu wszystkich pamięci podręcznych nowe żądanie obsługi wyzwala zapytania 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 ładować 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 pakietów z sieci CDN pod adresem URL swojej witryny. Na przykład: https://your-site-url.com/bundles/:bundleId.

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

Integracja klienta

Następnie możesz wykorzystać pakiet przy użyciu interfejsu API loadBundle pakietów SDK Cloud Firestore. Najpierw należy pobrać pakiet, a potem przekazać go do 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 określono tablicę ścieżek dokumentów, dane dokumentów klienta można pobrać 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 w każdej definicji usługi queries (patrz poniżej).