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:
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).