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

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

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

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

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

Local Emulator Suite, असली Firebase प्रोजेक्ट और डेमो प्रोजेक्ट के एम्युलेशन के साथ काम करता है.

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

असली Firebase प्रोजेक्ट वह होता है जिसे आपने बनाया और कॉन्फ़िगर किया है (ऐसा ज़्यादातर Firebase कंसोल के ज़रिए होता है).

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

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

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

डेमो

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

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

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

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

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

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

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

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

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

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

Android, Apple प्लैटफ़ॉर्म, और Web 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 एंडपॉइंट देता है. इसे टेस्ट फ़्रेमवर्क सेटअप/टियरडाउन चरण से, टेस्ट क्लास से, या टेस्ट शुरू होने से पहले शेल (जैसे, curl के साथ) से कॉल किया जा सकता है. बस एम्युलेटर प्रोसेस को बंद करने के लिए, इस तरीके का इस्तेमाल किया जा सकता है.

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

"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 निर्देश के साथ भी काम करते हैं. ज़्यादा जानकारी के लिए, एम्युलेटर कमांड रेफ़रंस देखें.

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

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

अनुरोध मॉनिटर का इस्तेमाल करना

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

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

Firestore एम्युलेटर के अनुरोधों का मॉनिटर करने से, सुरक्षा के नियमों का आकलन दिखाया जा रहा है

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

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

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

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

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

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

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

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

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

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

Cloud Firestore के लिए एक से ज़्यादा डेटाबेस सपोर्ट

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

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

लेन-देन

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

इंडेक्स

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

सीमाएं

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

आगे क्या करना है?