L'extension Firestore Bundle Builder (firestore-bundle-builder
) déploie une fonction HTTP qui sert des bundles de données Cloud Firestore. Vous définissez les bundles dans des documents Firestore, et l'extension diffuse le bundle de données de fichiers binaires statiques via des requêtes HTTP, ainsi que divers mécanismes de mise en cache intégrés à l'aide du CDN Firebase Hosting ou de Cloud Storage. Lorsqu'aucun bundle n'existe ou que les bundles existants ont expiré, cette fonction crée et met en cache un nouveau bundle à la demande.
Pour utiliser cette extension, vous devez d'abord créer une ou plusieurs spécifications de lot dans Firestore à l'aide du tableau de bord administrateur de l'extension. La spécification du groupe vous permet de définir des requêtes nommées (requêtes de collection et chemins d'accès aux documents spécifiques à ajouter au groupe).
Dans la spécification du bundle, vous pouvez également définir des paramètres destinés à être utilisés dans des requêtes nommées. Vous définissez les valeurs de ces paramètres à l'aide de paramètres de requête d'URL lorsque vous appelez la fonction HTTP.
Le lien ci-dessus fournit des instructions pour exécuter les utilitaires d'administration localement. Une fois l'application Web configurée, accédez à localhost:3000 pour créer une spécification à l'aide de l'UI:
Créer et diffuser le lot
Une fois l'extension installée et une spécification de bundle créée, vous pouvez commencer à créer et à diffuser des bundles en appelant le point de terminaison HTTP fourni par l'extension.
En fonction de la spécification du bundle, le bundle demandé peut être renvoyé à partir du cache du client, du cache Firebase Hosting ou d'un fichier Cloud Storage. Lorsque tous les caches ont expiré, une nouvelle requête de diffusion déclenche des requêtes Firestore pour créer le bundle à la demande.
Vous pouvez profiter des fonctionnalités du CDN Firebase Hosting en configurant un site Firebase Hosting qui pointe vers la fonction de diffusion à l'aide d'une règle de réécriture. Les CDN répliquent votre bundle sur de nombreux serveurs différents afin que vos utilisateurs puissent le charger automatiquement à partir du serveur le plus proche. Il s'agit de l'approche recommandée.
Pour configurer cela dans Firebase Hosting, créez ou modifiez un fichier firebase.json
avec le contenu suivant, puis déployez le site:
{
"hosting": {
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/bundles/*",
"function": "ext-firestore-bundle-builder-serve"
}
]
}
}
Une fois déployés, vous pouvez accéder à vos bundles depuis le CDN à l'aide de l'URL de votre site. Exemple : https://your-site-url.com/bundles/:bundleId
.
Vous pouvez également configurer l'extension pour qu'elle mette en cache les données dans Cloud Storage si vous ne souhaitez pas utiliser Firebase Hosting. Dans ce cas, vous appelez directement la fonction HTTP déployée pour générer des bundles.
Intégration du client
Vous pouvez ensuite consommer un bundle avec l'API loadBundle
des SDK Cloud Firestore. Vous devez d'abord télécharger le bundle, puis le fournir au SDK. Exemple :
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);
Une fois chargées, vous pouvez utiliser les données du bundle:
Si vous avez spécifié un tableau de chemins d'accès aux documents lorsque vous avez défini le bundle, vous pouvez obtenir les données des documents sur votre client via le bundle:
import { getFirestore, doc, getDocFromCache } from "firebase/firestore";
// Bundle Document IDs: ['users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2']
const ref = doc(getFirestore(), "users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2");
const snapshot = await getDocFromCache(ref);
Si vous avez spécifié des requêtes, vous pouvez utiliser l'API namedQuery
pour exécuter une requête à partir du groupe:
import { getFirestore, namedQuery } from "firebase/firestore";
const query = await namedQuery(getFirestore(), "queryId");
const snapshot = await getDocsFromCache(query);
Les ID de requête sont définis comme une clé de chaque définition de propriété queries
(voir ci-dessous).