फायरस्टोर बंडल बिल्डर एक्सटेंशन का उपयोग करना

फायरस्टोर बंडल बिल्डर ( firestore-bundle-builder ) एक्सटेंशन एक HTTP फ़ंक्शन को तैनात करता है जो क्लाउड फायरस्टोर डेटा बंडलों को परोसता है। आप फायरस्टोर दस्तावेज़ों में बंडलों को परिभाषित करते हैं, और एक्सटेंशन फायरबेस होस्टिंग सीडीएन या क्लाउड स्टोरेज का उपयोग करके विभिन्न अंतर्निहित कैशिंग तंत्रों के साथ HTTP अनुरोधों के माध्यम से स्थिर बाइनरी फ़ाइल डेटा बंडल प्रदान करता है। जब कोई बंडल मौजूद नहीं है या मौजूदा बंडल समाप्त हो गए हैं, तो यह फ़ंक्शन मांग पर एक नया बंडल बनाएगा और कैश करेगा।

इस एक्सटेंशन का उपयोग करने के लिए, आपको पहले एक्सटेंशन के एडमिन डैशबोर्ड का उपयोग करके फायरस्टोर में एक या अधिक बंडल विनिर्देश बनाने होंगे। बंडल विनिर्देश यह है कि आप नामित क्वेरीज़ (संग्रह क्वेरीज़ और बंडल में जोड़ने के लिए विशिष्ट दस्तावेज़ पथ) को कैसे परिभाषित करते हैं।

बंडल स्पेक के अंदर, आप नामित प्रश्नों में उपयोग किए जाने वाले पैरामीटर को भी परिभाषित कर सकते हैं। जब आप HTTP फ़ंक्शन को कॉल करते हैं तो आप यूआरएल क्वेरी पैरामीटर का उपयोग करके इन पैरामीटर के लिए मान सेट करते हैं।

उपरोक्त लिंक कुछ निर्देश प्रदान करता है ताकि आप व्यवस्थापक उपयोगिताओं को स्थानीय रूप से चला सकें। एक बार जब आप वेब ऐप सेट कर लें, तो यूआई का उपयोग करके एक विशिष्टता बनाने के लिए लोकलहोस्ट:3000 पर नेविगेट करें:

उदाहरण

बंडल का निर्माण और सेवा करना

एक बार जब आप एक्सटेंशन इंस्टॉल कर लेते हैं और बंडल स्पेक बना लेते हैं, तो आप एक्सटेंशन द्वारा प्रदान किए गए HTTP एंडपॉइंट पर कॉल करके बंडल बनाना और परोसना शुरू कर सकते हैं।

बंडल विनिर्देश के आधार पर, अनुरोधित बंडल क्लाइंट के कैश, फायरबेस होस्टिंग कैश या क्लाउड स्टोरेज फ़ाइल से वापस किया जा सकता है। जब सभी कैश समाप्त हो जाते हैं, तो एक नया सर्व अनुरोध मांग पर बंडल बनाने के लिए फायरस्टोर क्वेरीज़ को ट्रिगर करेगा।

आप एक फायरबेस होस्टिंग साइट स्थापित करके फायरबेस होस्टिंग सीडीएन की क्षमताओं का लाभ उठा सकते हैं जो रीराइट नियम का उपयोग करके सर्व फ़ंक्शन को इंगित करता है। सीडीएन आपके बंडल को कई अलग-अलग सर्वरों पर दोहराते हैं, ताकि आपके उपयोगकर्ता बंडल को निकटतम सर्वर से स्वचालित रूप से लोड कर सकें। यह पसंदीदा तरीका है.

इसे फायरबेस होस्टिंग में सेट करने के लिए, निम्नलिखित सामग्रियों के साथ एक firebase.json फ़ाइल बनाएं या संपादित करें और साइट को तैनात करें :

{
  "hosting": {
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "/bundles/*",
        "function": "ext-firestore-bundle-builder-serve"
      }
    ]
  }
}

एक बार तैनात होने के बाद, आप अपनी साइट यूआरएल का उपयोग करके सीडीएन से अपने बंडलों तक पहुंच सकते हैं। उदाहरण के लिए: https://your-site-url.com/bundles/:bundleId

वैकल्पिक रूप से, यदि आप फायरबेस होस्टिंग का उपयोग नहीं करना चाहते हैं तो आप क्लाउड स्टोरेज में डेटा कैश करने के लिए एक्सटेंशन को कॉन्फ़िगर कर सकते हैं। इस मामले में, आप बंडल उत्पन्न करने के लिए सीधे तैनात HTTP फ़ंक्शन को कॉल करेंगे।

ग्राहक एकीकरण

इसके बाद आप क्लाउड फायरस्टोर एसडीके के loadBundle एपीआई के साथ एक बंडल का उपभोग कर सकते हैं। पहले बंडल को डाउनलोड करना होगा, और फिर एसडीके को प्रदान करना होगा। उदाहरण के लिए:

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

एक बार लोड होने पर, आप बंडल से डेटा का उपयोग कर सकते हैं:

यदि आपने बंडल को परिभाषित करते समय दस्तावेज़ पथों की एक सरणी निर्दिष्ट की है, तो आप बंडल के माध्यम से अपने क्लाइंट पर दस्तावेज़ डेटा प्राप्त कर सकते हैं:

import { getFirestore, doc, getDocFromCache } from "firebase/firestore";
// Bundle Document IDs: ['users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2']

const ref = doc(getFirestore(), "users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2");
const snapshot = await getDocFromCache(ref);

यदि आपने क्वेरी निर्दिष्ट की है, तो आप बंडल से क्वेरी चलाने के लिए namedQuery एपीआई का उपयोग कर सकते हैं:

import { getFirestore, namedQuery } from "firebase/firestore";
const query = await namedQuery(getFirestore(), "queryId");
const snapshot = await getDocsFromCache(query);

क्वेरी आईडी को प्रत्येक queries प्रॉपर्टी परिभाषा की कुंजी के रूप में परिभाषित किया गया है (नीचे देखें)।