अपने ऐप्लिकेशन को Cloud Firestore Emulator से कनेक्ट करें

अपने ऐप्लिकेशन को Cloud Firestore एम्युलेटर से कनेक्ट करने से पहले, पक्का करें कि आपको Firebase लोकल एम्युलेटर सुइट का पूरा वर्कफ़्लो पता है. साथ ही, आपने लोकल एम्युलेटर सुइट को इंस्टॉल और कॉन्फ़िगर किया है. साथ ही, उसके सीएलआई निर्देशों की समीक्षा भी की है.

कोई Firebase प्रोजेक्ट चुनें

Firebase लोकल एम्युलेटर सुइट, किसी एक Firebase प्रोजेक्ट के लिए प्रॉडक्ट को एम्युलेट करता है.

एम्युलेटर शुरू करने से पहले, अपनी वर्क डायरेक्ट्री में सीएलआई रन firebase use में जाकर, इस्तेमाल किया जाने वाला प्रोजेक्ट चुनें. इसके अलावा, हर एम्युलेटर के निर्देश के लिए --project फ़्लैग को भी पास किया जा सकता है.

लोकल एम्युलेटर सुइट, असली Firebase प्रोजेक्ट और डेमो प्रोजेक्ट को एम्युलेट करने की सुविधा देता है.

प्रोजेक्ट टाइप सुविधाएं एम्युलेटर के साथ इस्तेमाल करें
रीयल

रीयल Firebase प्रोजेक्ट, वह प्रोजेक्ट होता है जिसे आपने बनाया और कॉन्फ़िगर किया है. ज़्यादातर मामलों में, Firebase कंसोल से इसका इस्तेमाल किया जाता है.

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

असली Firebase प्रोजेक्ट के साथ काम करते समय, किसी भी या इस्तेमाल किए जा सकने वाले सभी प्रॉडक्ट के लिए, एम्युलेटर चलाए जा सकते हैं.

किसी ऐसे प्रॉडक्ट के लिए जिसे एम्युलेट नहीं किया जा रहा है, आपके ऐप्लिकेशन और कोड लाइव संसाधन (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन वगैरह) के साथ इंटरैक्ट करेंगे.

डेमो

डेमो Firebase प्रोजेक्ट में, न तो असली Firebase कॉन्फ़िगरेशन होता है और न ही कोई लाइव रिसॉर्स. आम तौर पर, इन प्रोजेक्ट को कोडलैब या दूसरे ट्यूटोरियल से ऐक्सेस किया जाता है.

डेमो प्रोजेक्ट के प्रोजेक्ट आईडी में demo- प्रीफ़िक्स होता है.

Firebase के डेमो प्रोजेक्ट के साथ काम करते समय, आपके ऐप्लिकेशन और कोड सिर्फ़ एम्युलेटर के साथ इंटरैक्ट करते हैं. अगर आपका ऐप्लिकेशन किसी ऐसे संसाधन से इंटरैक्ट करने की कोशिश करता है जिसके लिए एम्युलेटर नहीं चल रहा है, तो वह कोड काम नहीं करेगा.

हमारा सुझाव है कि जहां भी मुमकिन हो, आप डेमो प्रोजेक्ट का इस्तेमाल करें. इसके ये फ़ायदे हैं:

  • सेटअप करना आसान है, क्योंकि Firebase प्रोजेक्ट बनाए बिना भी एम्युलेटर चलाए जा सकते हैं
  • ज़्यादा सुरक्षा, क्योंकि अगर आपका कोड गलती से एम्युलेट न किए गए (प्रोडक्शन) संसाधनों को शुरू कर देता है, तो डेटा में बदलाव, इस्तेमाल, और बिलिंग की कोई संभावना नहीं होती
  • बेहतर ऑफ़लाइन सहायता, क्योंकि अपना SDK कॉन्फ़िगरेशन डाउनलोड करने के लिए इंटरनेट ऐक्सेस करने की ज़रूरत नहीं होती.

एम्युलेटर से बात करने के लिए, अपने ऐप्लिकेशन का इस्तेमाल करें

शुरू होने पर, Cloud Firestore एम्युलेटर, आपकी firebase.json फ़ाइल में मौजूद हर firestore कॉन्फ़िगरेशन के लिए, डिफ़ॉल्ट डेटाबेस और नाम वाला डेटाबेस बनाता है.

नाम वाले डेटाबेस भी, किसी खास डेटाबेस से रेफ़रंस लेने वाले एम्युलेटर को किए गए किसी भी SDK या REST API कॉल के जवाब में, बिना किसी परेशानी के बनाए जाते हैं. गलत तरीके से बनाए गए ऐसे डेटाबेस, ओपन रूल के साथ काम करते हैं.

एम्युलेटर सुइट के यूज़र इंटरफ़ेस (यूआई) में अपने डिफ़ॉल्ट और नाम वाले डेटाबेस के साथ इंटरैक्टिव तरीके से काम करने के लिए, अपने ब्राउज़र के पता बार में यूआरएल को अपडेट करें. इसके बाद, डिफ़ॉल्ट या नाम वाले डेटाबेस में से किसी एक को चुनें.

  • उदाहरण के लिए, अपने डिफ़ॉल्ट इंस्टेंस में डेटा ब्राउज़ करने के लिए, यूआरएल को localhost:4000/firestore/default/data पर अपडेट करें
  • ecommerce नाम के इंस्टेंस में ब्राउज़ करने के लिए, localhost:4000/firestore/ecommerce/data में अपडेट करें.

Android, Apple प्लैटफ़ॉर्म, और वेब SDK टूल

Cloud Firestore के साथ इंटरैक्ट करने के लिए, अपना इन-ऐप्लिकेशन कॉन्फ़िगरेशन या टेस्ट क्लास सेट अप करें. इसकी जानकारी नीचे दी गई है. ध्यान दें कि नीचे दिए गए सैंपल में, ऐप्लिकेशन कोड डिफ़ॉल्ट प्रोजेक्ट के डेटाबेस से कनेक्ट हो रहा है. डिफ़ॉल्ट डेटाबेस के अलावा, अन्य Cloud Firestore डेटाबेस के उदाहरण देखने के लिए, एक से ज़्यादा डेटाबेस के लिए गाइड देखें.

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val firestore = Firebase.firestore
firestore.useEmulator("10.0.2.2", 8080)

firestore.firestoreSettings = firestoreSettings {
    isPersistenceEnabled = false
}
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
firestore.useEmulator("10.0.2.2", 8080);

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(false)
        .build();
firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

वेब मॉड्यूलर एपीआई

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, '127.0.0.1', 8080);

वेब नेमस्पेस किया गया एपीआई

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("127.0.0.1", 8080);
}

एम्युलेटर का इस्तेमाल करके, Firestore इवेंट से ट्रिगर किए गए Cloud Functions की जांच करने के लिए, किसी दूसरे सेटअप की ज़रूरत नहीं है. जब Firestore और Cloud Functions एम्युलेटर, दोनों चालू होते हैं, तो वे अपने-आप एक साथ काम करते हैं.

एडमिन SDK

FIRESTORE_EMULATOR_HOST एनवायरमेंट वैरिएबल सेट होने पर, Firebase एडमिन SDK टूल, Cloud Firestore एम्युलेटर से अपने-आप कनेक्ट हो जाते हैं:

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

अगर आपका कोड, Cloud Functions एम्युलेटर में चल रहा है, तो initializeApp पर कॉल करने पर, आपका प्रोजेक्ट आईडी और अन्य कॉन्फ़िगरेशन अपने-आप सेट हो जाते हैं.

अगर आपको अपने एडमिन SDK टूल को किसी दूसरे एनवायरमेंट में चल रहे शेयर किए गए एम्युलेटर से कनेक्ट करना है, तो आपको वही प्रोजेक्ट आईडी बताना होगा जो Firebase सीएलआई का इस्तेमाल करके सेट किया गया है. initializeApp को सीधे प्रोजेक्ट आईडी को पास किया जा सकता है या GCLOUD_PROJECT एनवायरमेंट वैरिएबल को सेट किया जा सकता है.

Node.js एडमिन SDK
admin.initializeApp({ projectId: "your-project-id" });
एनवायरमेंट वैरिएबल
export GCLOUD_PROJECT="your-project-id"

अलग-अलग टेस्ट के बीच अपना डेटाबेस मिटाना

प्रोडक्शन Firestore, डेटाबेस को फ़्लश करने के लिए कोई प्लैटफ़ॉर्म SDK तरीका उपलब्ध नहीं कराता है, लेकिन Firestore एम्युलेटर खास तौर पर इस मकसद के लिए आपको एक REST एंडपॉइंट देता है, जिसे टेस्ट फ़्रेमवर्क सेटअप/tearडाउन चरण से, टेस्ट क्लास से या शेल (जैसे, curl के साथ) से कॉल किया जा सकता है. आप एम्युलेटर की प्रोसेस को बंद करने के लिए, इस तरीके का इस्तेमाल आसानी से कर सकते हैं.

सही तरीके में, एचटीटीपी डेटा मिटाने की कार्रवाई करें और यहां दिए गए एंडपॉइंट को firestore-emulator-example जैसे Firebase प्रोजेक्ट आईडी की जानकारी दें:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

स्वाभाविक रूप से, आपका कोड REST की पुष्टि के इंतज़ार में होना चाहिए कि फ़्लश पूरा हो गया या फ़ेल हो गया.

आप शेल से यह कार्रवाई कर सकते हैं:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

इस तरह के चरण को लागू करने के बाद, अपने टेस्ट को क्रम से लगाया जा सकता है और फ़ंक्शन को इस भरोसे के साथ ट्रिगर किया जा सकता है कि डेटा रन करने और नए बेसलाइन टेस्ट कॉन्फ़िगरेशन का इस्तेमाल करने के दौरान, पुराना डेटा पूरी तरह मिट जाएगा.

डेटा इंपोर्ट और एक्सपोर्ट करना

'Firebase के लिए Cloud Storage' एम्युलेटर की मदद से, डेटाबेस और Cloud Storage के एम्युलेटर की मदद से, चल रहे एम्युलेटर के इंस्टेंस से डेटा एक्सपोर्ट किया जा सकता है. अपने यूनिट टेस्ट या लगातार इंटिग्रेशन वर्कफ़्लो में इस्तेमाल करने के लिए, डेटा का एक बेसलाइन सेट तय करें. इसके बाद, उसे टीम के साथ शेयर करने के लिए एक्सपोर्ट करें.

firebase emulators:export ./dir

टेस्ट में, एम्युलेटर के चालू होने पर, बेसलाइन डेटा इंपोर्ट करें.

firebase emulators:start --import=./dir

एम्युलेटर को शटडाउन पर डेटा एक्सपोर्ट करने का निर्देश दिया जा सकता है. इसके लिए, एक्सपोर्ट पाथ की जानकारी दें या फिर --import फ़्लैग को पास किए गए पाथ का इस्तेमाल करें.

firebase emulators:start --import=./dir --export-on-exit

डेटा को इंपोर्ट और एक्सपोर्ट करने के ये विकल्प firebase emulators:exec कमांड के साथ भी काम करते हैं. ज़्यादा जानकारी के लिए, एमुलेटर कमांड का रेफ़रंस देखें.

सुरक्षा नियमों से जुड़ी गतिविधि को विज़ुअलाइज़ करें

प्रोटोटाइप और टेस्ट लूप का इस्तेमाल करते समय, लोकल एम्युलेटर सुइट से मिले विज़ुअलाइज़ेशन टूल और रिपोर्ट का इस्तेमाल किया जा सकता है.

रिक्वेस्ट मॉनिटर का इस्तेमाल करना

Cloud Firestore एम्युलेटर की मदद से, एम्युलेटर सुइट के यूज़र इंटरफ़ेस (यूआई) में क्लाइंट के अनुरोधों को विज़ुअलाइज़ किया जा सकता है. इसमें Firebase के सुरक्षा नियमों के लिए, इवैलुएशन ट्रेसिंग भी शामिल है.

हर अनुरोध के आकलन के क्रम की पूरी जानकारी देखने के लिए, Firestore > अनुरोध टैब खोलें.

सुरक्षा नियमों का इवैलुएशन दिखाने वाला Firestore एम्युलेटर अनुरोध मॉनिटर

नियमों की इवैलुएशन रिपोर्ट को विज़ुअलाइज़ करना

अपने प्रोटोटाइप में सुरक्षा नियम जोड़ने पर उन्हें लोकल एम्युलेटर सुइट के डीबग टूल से डीबग किया जा सकता है.

परीक्षणों का एक सुइट चलाने के बाद, आप परीक्षण कवरेज रिपोर्ट एक्सेस कर सकते हैं, जिसमें दिखाया जाता है कि आपके प्रत्येक सुरक्षा नियम का मूल्यांकन कैसे किया गया था.

रिपोर्ट पाने के लिए, एम्युलेटर के चलने के दौरान उस पर एक्सपोज़ किए गए एंडपॉइंट के बारे में क्वेरी करें. ब्राउज़र-फ़्रेंडली वर्शन के लिए, इस यूआरएल का इस्तेमाल करें:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

इससे आपके नियम, एक्सप्रेशन और सब-एक्सप्रेशन में बदल जाते हैं. इन्हें माउसओवर करके ज़्यादा जानकारी पाई जा सकती है. इसमें, आकलन किए गए और दिखाई गई वैल्यू की संख्या भी शामिल है. इस डेटा के रॉ JSON वर्शन के लिए, अपनी क्वेरी में यह यूआरएल शामिल करें:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

यहां रिपोर्ट का एचटीएमएल वर्शन ऐसे इवैलुएशन को हाइलाइट करता है जिनमें तय नहीं की गई और शून्य वैल्यू वाली गड़बड़ियां होती हैं:

Cloud Firestore एम्युलेटर, प्रोडक्शन से किस तरह अलग है

Cloud Firestore एम्युलेटर कुछ अहम सीमाओं के साथ, प्रोडक्शन सेवा के व्यवहार को सही तरीके से दोहराने की कोशिश करता है.

Cloud Firestore के लिए एक से ज़्यादा डेटाबेस की सुविधा

फ़िलहाल, एम्युलेटर सुइट का यूज़र इंटरफ़ेस (यूआई) डिफ़ॉल्ट डेटाबेस के लिए इंटरैक्टिव बनाने, बदलाव करने, मिटाने, निगरानी करने का अनुरोध करने, और सुरक्षा विज़ुअलाइज़ेशन की सुविधा देता है. हालांकि, यह सिर्फ़ नाम वाले डेटाबेस के लिए काम नहीं करता.

हालांकि, एम्युलेटर आपकी firebase.json फ़ाइल के कॉन्फ़िगरेशन के आधार पर, नाम वाला डेटाबेस बनाता है. साथ ही, SDK टूल या REST API कॉल के जवाब में, वह साफ़ तौर पर अपना डेटाबेस बनाता है.

लेन-देन

एम्युलेटर, फ़िलहाल प्रोडक्शन में देखे गए लेन-देन के सभी तरीकों को लागू नहीं करता. जब किसी ऐसी सुविधा की जांच की जाती है जिसमें एक ही दस्तावेज़ में कई एक साथ लिखा जाता है, तो एम्युलेटर को कॉन्टेंट लिखने के अनुरोधों को पूरा करने में ज़्यादा समय लग सकता है. कुछ मामलों में, लॉक हटाने में 30 सेकंड लग सकते हैं. अगर ज़रूरी हो, तो जांच के टाइम आउट में अपने हिसाब से बदलाव करें.

इंडेक्स

एम्युलेटर, कंपाउंड इंडेक्स को ट्रैक नहीं करता है. इसके बजाय, यह किसी भी मान्य क्वेरी को लागू करेगा. पक्का करें कि आपको सही Cloud Firestore के इंस्टेंस के हिसाब से अपने ऐप्लिकेशन की जांच करनी है, ताकि यह तय किया जा सके कि आपको कौनसे इंडेक्स की ज़रूरत होगी.

बाहर रखे गए प्लेसमेंट से जुड़ी सीमाएं

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

अगला कदम क्या है?