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

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

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

Firebase Local Emulator Suite एक Firebase प्रोजेक्ट के लिए प्रॉडक्ट की नकल करता है.

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

Local Emulator Suite असली Firebase प्रोजेक्ट और डेमो प्रोजेक्ट की नकल करने की सुविधा देता है.

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

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

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

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

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

डेमो

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

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

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

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

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

एम्युलेटर के साथ इंटरैक्ट करने के लिए, अपने ऐप्लिकेशन को इंस्ट्रूमेंट करना

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

नाम वाले डेटाबेस, एसडीके या REST API के उन कॉल के जवाब में भी बनाए जाते हैं जो किसी खास डेटाबेस को रेफ़र करते हैं. इस तरह के डेटाबेस, ओपन नियमों के साथ काम करते हैं.

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

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

किसी खास वर्शन में एम्युलेटर शुरू करना

एम्युलेटर, आपकी firebase.json फ़ाइल के firestore.edition सेक्शन में बताए गए वर्शन में शुरू होगा. आपके पास, firebase.json के emulators.firestore.edition सेक्शन में भी वर्शन तय करने का विकल्प होता है. वर्शन के लिए मान्य वैल्यू, standard और enterprise हैं. अगर दोनों कॉन्फ़िगरेशन में edition तय किया जाता है, तो emulators.firestore.edition को प्राथमिकता दी जाती है.

    {
      ...
      "firestore": {
        "rules": "firestore.rules",
        "indexes": "firestore.indexes.json",
        "edition": "enterprise"
      },
      "emulators": {
        "firestore": {
          "port": 8080,
          "edition": "enterprise" // Takes precedence over `firestore.edition`
        }
      },
      ...
    }

Android, Apple प्लैटफ़ॉर्म, और वेब एसडीके

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

Kotlin
// 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
Unity
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
// Connects to the Firestore Emulator running on port 8080
db.Settings.Host = "127.0.0.1:8080";
db.Settings.SslEnabled = false;

Web

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

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

Web

// 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, दोनों के एम्युलेटर चलने पर, वे अपने-आप एक साथ काम करते हैं.

Admin SDKs

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

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

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

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

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

Cloud Firestore REST API

Cloud Firestore एम्युलेटर, आपके डेटाबेस के साथ इंटरैक्ट करने के लिए, REST एंडपॉइंट उपलब्ध कराता है. REST API के सभी कॉल, http://localhost:8080/v1 एंडपॉइंट पर किए जाने चाहिए.

REST कॉल के लिए पूरा पाथ, इस पैटर्न के मुताबिक होता है:

http://localhost:8080/v1/projects/{project_id}/databases/{database_id}/documents/{document_path}

उदाहरण के लिए, my-project-id प्रोजेक्ट के लिए, users कलेक्शन में मौजूद सभी दस्तावेज़ों की सूची बनाने के लिए, curl का इस्तेमाल किया जा सकता है:

curl -X GET "http://localhost:8080/v1/projects/my-project-id/databases/(default)/documents/users"

जांच के बीच, अपना डेटाबेस साफ़ करना

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

किसी सही तरीके से, एचटीटीपी DELETE ऑपरेशन करें. इसके लिए, अपना Firebase प्रोजेक्ट आईडी दें. उदाहरण के लिए, 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"

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

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

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

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 एम्युलेटर की मदद से, Emulator Suite UI में क्लाइंट के अनुरोधों को विज़ुअलाइज़ किया जा सकता है. इसमें Firebase Security Rules के लिए, आकलन ट्रेसिंग भी शामिल है.

हर अनुरोध के लिए, आकलन का सिलसिलेवार ब्यौरा देखने के लिए, Firestore > अनुरोध टैब खोलें.

Firestore Emulator Requests Monitor में, सुरक्षा के नियमों के आकलन को दिखाया गया है

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

प्रोटोटाइप में सुरक्षा नियम जोड़ने के दौरान, उन्हें 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 एम्युलेटर, प्रोडक्शन सेवा के व्यवहार को सटीक तरीके से दोहराने की कोशिश करता है. हालांकि, इसमें कुछ अहम सीमाएं हैं.

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

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

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

लेन-देन

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

इंडेक्स

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

सीमाएं

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

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