Korzystanie z rozszerzenia konstruktora pakietów Firestore

Rozszerzenie Firestore Bundle Builder ( firestore-bundle-builder ) wdraża funkcję HTTP, która obsługuje pakiety danych Cloud Firestore . Definiujesz pakiety w dokumentach Firestore, a rozszerzenie obsługuje statyczny pakiet danych plików binarnych za pośrednictwem żądań HTTP wraz z różnymi wbudowanymi mechanizmami buforowania za pomocą Firebase Hosting CDN lub Cloud Storage. Jeśli nie istnieje żaden pakiet lub istniejące pakiety wygasły, ta funkcja na żądanie utworzy i buforuje nowy pakiet.

Aby skorzystać z tego rozszerzenia, musisz najpierw utworzyć jedną lub więcej specyfikacji pakietu w Firestore, korzystając z panelu administracyjnego rozszerzenia. Specyfikacja pakietu to sposób definiowania nazwanych zapytań (zapytań zbierających i określonych ścieżek dokumentów, które należy dodać do pakietu).

Wewnątrz specyfikacji pakietu można także zdefiniować parametry, które mają być używane w nazwanych zapytaniach. Wartości tych parametrów ustawia się za pomocą parametrów zapytania adresu URL podczas wywoływania funkcji HTTP.

Powyższy link zawiera instrukcje umożliwiające lokalne uruchomienie narzędzi administracyjnych. Po skonfigurowaniu aplikacji internetowej przejdź do localhost:3000, aby utworzyć specyfikację za pomocą interfejsu użytkownika:

przykład

Budowanie i obsługa pakietu

Po zainstalowaniu rozszerzenia i utworzeniu specyfikacji pakietu możesz rozpocząć tworzenie i udostępnianie pakietów, 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 Firebase Hosting lub pliku Cloud Storage. Kiedy wszystkie pamięci podręczne wygasną, nowe żądanie udostępnienia uruchomi zapytania Firestore w celu zbudowania pakietu na żądanie.

Możesz skorzystać z możliwości Firebase Hosting CDN, konfigurując witrynę Firebase Hosting, która wskazuje funkcję udostępniania 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 to skonfigurować w Hostingu Firebase, utwórz lub edytuj plik firebase.json z następującą 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 sieci CDN, korzystając z adresu URL swojej witryny. Na przykład: https://your-site-url.com/bundles/:bundleId .

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

Integracja Klienta

Następnie możesz skorzystać z pakietu za pomocą interfejsu API loadBundle zestawów SDK Cloud Firestore. Najpierw należy pobrać pakiet, a następnie dostarczyć go do SDK. Na 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 paczki określiłeś tablicę ścieżek dokumentów, możesz uzyskać dane dokumentu na swoim kliencie za pośrednictwem paczki:

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śliłeś 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 definicji właściwości każdego queries (patrz poniżej).