Utilisation de l'extension Firestore Bundle Builder

L'extension Firestore Bundle Builder ( firestore-bundle-builder ) déploie une fonction HTTP qui sert les bundles de données Cloud Firestore . Vous définissez les bundles dans les documents Firestore et l'extension sert un 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 utilisant Firebase Hosting CDN ou Cloud Storage. Lorsqu'aucun bundle n'existe ou que les bundles existants ont expiré, cette fonction créera et mettra en cache un nouveau bundle à la demande.

Pour utiliser cette extension, vous devez d'abord créer une ou plusieurs spécifications de bundle dans Firestore à l'aide du tableau de bord d'administration de l'extension. La spécification du bundle indique la manière dont vous définissez les requêtes nommées (requêtes de collection et chemins de documents spécifiques à ajouter au bundle).

Dans la spécification du bundle, vous pouvez également définir des paramètres destinés à être utilisés dans les requêtes nommées. Vous définissez les valeurs de ces paramètres à l'aide des paramètres de requête URL lorsque vous appelez la fonction HTTP.

Le lien ci-dessus fournit des instructions vous permettant d'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'interface utilisateur :

exemple

Construire et servir le Bundle

Une fois que vous avez installé l'extension et créé une spécification de bundle, vous pouvez commencer à créer et à servir 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 demande de service déclenchera des requêtes Firestore pour créer le bundle à la demande.

Vous pouvez profiter des capacités de Firebase Hosting CDN en configurant un site Firebase Hosting qui pointe vers la fonction de service à l'aide d'une règle de réécriture. Les CDN répliquent votre offre groupée sur de nombreux serveurs différents, afin que vos utilisateurs puissent charger automatiquement l'offre groupée à partir du serveur le plus proche. C’est l’approche privilégiée.

Pour configurer cela dans Firebase Hosting, créez ou modifiez un fichier firebase.json avec le contenu suivant et 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 offres groupées depuis le CDN en utilisant l'URL de votre site. Par exemple : https://your-site-url.com/bundles/:bundleId .

Vous pouvez également configurer l'extension pour mettre en cache les données dans Cloud Storage si vous ne souhaitez pas utiliser Firebase Hosting. Dans ce cas, vous appelleriez directement la fonction HTTP déployée pour générer des bundles.

Intégration client

Ensuite, vous pouvez consommer un bundle avec l'API loadBundle des SDK Cloud Firestore. Le bundle doit d’abord être téléchargé, puis fourni au SDK. Par 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é, vous pouvez utiliser les données du bundle :

Si vous avez spécifié un tableau de chemins de documents lors de la définition du bundle, vous pouvez obtenir les données du document 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 bundle :

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