पुन: प्राप्त डेटा

जीईटी के साथ डेटा पढ़ना

हम अपने फायरबेस डेटाबेस से उसके URL समापन बिंदु पर GET अनुरोध जारी करके डेटा पढ़ सकते हैं। आइए पिछले अनुभाग से हमारे ब्लॉग उदाहरण को जारी रखें और हमारे सभी ब्लॉग पोस्ट डेटा को पढ़ें:

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

एक सफल अनुरोध 200 OK HTTP स्थिति कोड द्वारा इंगित किया जाएगा, और प्रतिक्रिया में वह डेटा शामिल होगा जिसे हम पुनर्प्राप्त कर रहे हैं।

यूआरआई पैरामीटर जोड़ना

हमारे फायरबेस डेटाबेस से डेटा पढ़ते समय REST API कई क्वेरी पैरामीटर स्वीकार करता है। नीचे सूचीबद्ध सबसे अधिक उपयोग किए जाने वाले पैरामीटर हैं। पूरी सूची के लिए, REST API संदर्भ देखें।

प्रमाणन

auth अनुरोध पैरामीटर फायरबेस रीयलटाइम डेटाबेस सुरक्षा नियमों द्वारा संरक्षित डेटा तक पहुंच की अनुमति देता है, और सभी अनुरोध प्रकारों द्वारा समर्थित है। तर्क या तो आपके Firebase ऐप का रहस्य या प्रमाणीकरण टोकन हो सकता है, जैसा कि Firebase Projects में उपयोगकर्ता में वर्णित है। निम्नलिखित उदाहरण में हम एक auth पैरामीटर के साथ एक GET अनुरोध भेजते हैं, जहाँ CREDENTIAL या तो आपके Firebase ऐप का रहस्य है या एक प्रमाणीकरण टोकन है:

curl 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'

छपाई

print=pretty डेटा को मानव-पठनीय प्रारूप में लौटाता है।

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

print=silent निर्दिष्ट करना सफलता पर 204 No Content लौटाता है।

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=silent'

वापस कॉल करें

डोमेन भर में एक वेब ब्राउज़र से REST कॉल करने के लिए आप JSONP का उपयोग जावास्क्रिप्ट कॉलबैक फ़ंक्शन में प्रतिक्रिया को लपेटने के लिए कर सकते हैं। callback= आपके द्वारा निर्दिष्ट कॉलबैक फ़ंक्शन में REST API द्वारा लौटाए गए डेटा को लपेटने के लिए। उदाहरण के लिए:

<script>
  function gotData(data) {
    console.log(data);
  }
</script>
<script src="https://docs-examples.firebaseio.com/fireblog/posts.json?callback=gotData">

उथला

यह एक उन्नत सुविधा है, जिसे सब कुछ डाउनलोड किए बिना बड़े डेटासेट के साथ काम करने में आपकी मदद करने के लिए डिज़ाइन किया गया है। इसका उपयोग करने के लिए, एक पैरामीटर के रूप में shallow=true जोड़ें। यह लौटाए गए डेटा की गहराई को सीमित करेगा। यदि स्थान पर डेटा एक JSON प्रिमिटिव (स्ट्रिंग, नंबर, या बूलियन) है, तो इसका मान केवल वापस कर दिया जाएगा। यदि स्थान पर डेटा स्नैपशॉट एक JSON ऑब्जेक्ट है, तो प्रत्येक कुंजी के मान को छोटा कर दिया जाएगा। उदाहरण के लिए, नीचे दिए गए डेटा का उपयोग करना:

{
  "message": {
    "user": {
      "name": "Chris"
    },
    "body": "Hello!"
  }
}

// A request to /message.json?shallow=true
// would return the following:
{
  "user": true,
  "body": true
}

// A request to /message/body.json?shallow=true
// would simply return:
"Hello!"

इस curl अनुरोध के साथ इसे आज़माएं:

curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?shallow=true&print=pretty'

समय समाप्त

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

निम्नलिखित प्रारूप का उपयोग करके timeouts निर्दिष्ट करें: 3ms , 3s , या 3min , एक संख्या और एक इकाई के साथ। यदि निर्दिष्ट नहीं है, तो अधिकतम 15min का timeout लागू किया जाएगा। यदि timeout सकारात्मक नहीं है, या अधिकतम से अधिक है, तो HTTP 400 त्रुटि के साथ अनुरोध को अस्वीकार कर दिया जाएगा। निम्नलिखित उदाहरण में, GET अनुरोध में 10 सेकंड का timeout शामिल है।

curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?timeout=10s'

फ़िल्टरिंग डेटा

हम विभिन्न कारकों के आधार पर डेटा को फ़िल्टर करने के लिए प्रश्नों का निर्माण कर सकते हैं। शुरू करने के लिए, आप निर्दिष्ट करते हैं कि आप orderBy पैरामीटर का उपयोग करके अपने डेटा को कैसे फ़िल्टर करना चाहते हैं। फिर, आप orderBy अन्य पांच पैरामीटरों में से किसी के साथ जोड़ते हैं: limitToFirst , limitToLast , startAt , endAt , और equalTo

चूंकि फायरबेस में हम सभी सोचते हैं कि डायनासोर बहुत अच्छे हैं, हम डेटा को फ़िल्टर करने के तरीके को प्रदर्शित करने के लिए डायनासोर तथ्यों के एक नमूना डेटाबेस से एक स्निपेट का उपयोग करेंगे:

{
  "lambeosaurus": {
    "height": 2.1,
    "length": 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height": 4,
    "length": 9,
    "weight": 2500
  }
}

हम डेटा को तीन तरीकों में से एक में फ़िल्टर कर सकते हैं: चाइल्ड कुंजी द्वारा, कुंजी द्वारा, या मान द्वारा। एक क्वेरी इनमें से किसी एक पैरामीटर से शुरू होती है, और उसके बाद निम्नलिखित पैरामीटर में से एक या अधिक के साथ जोड़ा जाना चाहिए: startAt , endAt , limitToFirst , limitToLast , या equalTo

एक निर्दिष्ट चाइल्ड कुंजी द्वारा फ़िल्टर करना

हम उस कुंजी को orderBy पैरामीटर में पास करके एक सामान्य चाइल्ड कुंजी द्वारा नोड्स को फ़िल्टर कर सकते हैं। उदाहरण के लिए, 3 से अधिक ऊँचाई वाले सभी डायनासोरों को पुनः प्राप्त करने के लिए, हम निम्नलिखित कार्य कर सकते हैं:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'

कोई भी नोड जिसमें वह चाइल्ड कुंजी नहीं है जिस पर हम फ़िल्टर कर रहे हैं, उसे null के मान के साथ क्रमबद्ध किया जाएगा। डेटा कैसे ऑर्डर किया जाता है, इसके विवरण के लिए देखें कि डेटा कैसे ऑर्डर किया जाता है

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

{
  "lambeosaurus": {
    "dimensions": {
      "height" : 2.1,
      "length" : 12.5,
      "weight": 5000
    }
  },
  "stegosaurus": {
    "dimensions": {
      "height" : 4,
      "length" : 9,
      "weight" : 2500
    }
  }
}

अब ऊँचाई को क्वेरी करने के लिए, हम एक कुंजी के बजाय वस्तु के पूर्ण पथ का उपयोग करते हैं:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="dimensions/height"&startAt=3&print=pretty'

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

कुंजी द्वारा फ़िल्टर करना

हम orderBy="$key" पैरामीटर का उपयोग करके नोड्स को उनकी चाबियों से फ़िल्टर भी कर सकते हैं। निम्नलिखित उदाहरण अक्षर a से m तक शुरू होने वाले नाम वाले सभी डायनासोर को पुनः प्राप्त करता है:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="a"&endAt="m"&print=pretty'

मान द्वारा फ़िल्टर करना

हम orderBy="$value" पैरामीटर का उपयोग करके नोड्स को उनके चाइल्ड कीज़ के मान से फ़िल्टर कर सकते हैं। मान लीजिए कि डायनासोर एक डिनो खेल प्रतियोगिता कर रहे हैं और हम निम्नलिखित प्रारूप में उनके स्कोर पर नज़र रख रहे हैं:

{
  "scores": {
    "bruhathkayosaurus": 55,
    "lambeosaurus": 21,
    "linhenykus": 80,
    "pterodactyl": 93,
    "stegosaurus": 5,
    "triceratops": 22
  }
}

50 से अधिक स्कोर वाले सभी डायनासोर को पुनः प्राप्त करने के लिए, हम निम्नलिखित अनुरोध कर सकते हैं:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&startAt=50&print=pretty'

orderBy="$value" उपयोग करते समय null , बूलियन, स्ट्रिंग और ऑब्जेक्ट मानों को कैसे क्रमबद्ध किया जाता है, इस पर स्पष्टीकरण के लिए डेटा कैसे ऑर्डर किया जाता है देखें।

जटिल फ़िल्टरिंग

अधिक जटिल प्रश्नों के निर्माण के लिए हम कई मापदंडों को जोड़ सकते हैं।

सीमित प्रश्न

limitToFirst और limitToLast पैरामीटर का उपयोग डेटा प्राप्त करने के लिए बच्चों की अधिकतम संख्या निर्धारित करने के लिए किया जाता है। यदि हम 100 की सीमा निर्धारित करते हैं, तो हमें मिलान करने वाले केवल 100 बच्चे ही प्राप्त होंगे। यदि हमारे डेटाबेस में 100 से कम संदेश संग्रहीत हैं, तो हम प्रत्येक बच्चे को प्राप्त करेंगे। हालाँकि, यदि हमारे पास 100 से अधिक संदेश हैं, तो हम उनमें से केवल 100 संदेशों के लिए डेटा प्राप्त करेंगे। यदि हम limitToFirst उपयोग कर रहे हैं तो ये पहले 100 ऑर्डर किए गए संदेश होंगे या यदि हम limitToLast उपयोग कर रहे हैं तो अंतिम 100 ऑर्डर किए गए संदेश होंगे।

हमारे डायनासोर तथ्य डेटाबेस और orderBy उपयोग करके, हम दो सबसे भारी डायनासोर पा सकते हैं:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="weight"&limitToLast=2&print=pretty'

इसी प्रकार, हम limitToFirst का उपयोग कर दो सबसे छोटे डायनासोर पा सकते हैं:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&limitToFirst=2&print=pretty'

हम orderBy="$value" के साथ सीमा पूछताछ भी कर सकते हैं। यदि हम शीर्ष तीन उच्चतम स्कोरिंग डिनो खेल प्रतिस्पर्धियों के साथ एक लीडरबोर्ड बनाना चाहते हैं, तो हम निम्नलिखित कार्य कर सकते हैं:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&limitToLast=3&print=pretty'

रेंज प्रश्न

startAt , endAt , और equalTo उपयोग करने से हम अपने प्रश्नों के लिए मनमाने ढंग से आरंभ और समाप्ति बिंदु चुन सकते हैं। उदाहरण के लिए, यदि हम कम से कम तीन मीटर ऊँचे सभी डायनासोरों को खोजना चाहते हैं, तो हम orderBy और startAt जोड़ सकते हैं:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'

हम उन सभी डायनासोरों को खोजने के लिए endAt उपयोग कर सकते हैं जिनके नाम Pterodactyl lexicographically से पहले आते हैं:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&endAt="pterodactyl"&print=pretty'

हम अपनी क्वेरी के दोनों सिरों को सीमित करने के लिए startAt और endAt जोड़ सकते हैं। निम्नलिखित उदाहरण उन सभी डायनासोरों को ढूंढता है जिनका नाम "बी" अक्षर से शुरू होता है:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="b"&endAt="b\uf8ff"&print=pretty'

श्रेणी प्रश्न तब भी उपयोगी होते हैं जब आपको अपने डेटा को पृष्ठांकित करने की आवश्यकता होती है।

यह सब एक साथ डालें

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

MY_FAV_DINO_HEIGHT=`curl "https://dinosaur-facts.firebaseio.com/dinosaurs/stegosaurus/height.json"`
curl "https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy=\"height\"&endAt=${MY_FAV_DINO_HEIGHT}&print=pretty"

डेटा कैसे ऑर्डर किया जाता है

यह खंड बताता है कि तीन फ़िल्टरिंग मापदंडों में से प्रत्येक का उपयोग करते समय आपके डेटा को कैसे व्यवस्थित किया जाता है।

द्वारा आदेश

चाइल्ड कुंजी के नाम के साथ orderBy उपयोग करते समय, निर्दिष्ट चाइल्ड कुंजी वाले डेटा को निम्नानुसार आदेश दिया जाएगा:

  1. निर्दिष्ट चाइल्ड कुंजी के लिए null मान वाले बच्चे पहले आते हैं।
  2. निर्दिष्ट चाइल्ड कुंजी के लिए false मान वाले बच्चे आगे आते हैं। यदि एक से अधिक चिल्ड्रन का मान false है, तो उन्हें कुंजी द्वारा शब्दकोष के अनुसार क्रमबद्ध किया जाता है।
  3. निर्दिष्ट चाइल्ड कुंजी के लिए true मान वाले बच्चे आगे आते हैं। यदि एक से अधिक चिल्ड्रन का मान true है, तो उन्हें कुंजी द्वारा शब्दकोष के अनुसार क्रमबद्ध किया जाता है।
  4. संख्यात्मक मान वाले बच्चे आगे आते हैं, आरोही क्रम में क्रमबद्ध होते हैं। यदि निर्दिष्ट चाइल्ड नोड के लिए एकाधिक चिल्ड्रन का संख्यात्मक मान समान है, तो उन्हें कुंजी द्वारा क्रमबद्ध किया जाता है।
  5. तार संख्या के बाद आते हैं, और आरोही क्रम में शब्दावली के अनुसार क्रमबद्ध होते हैं। यदि निर्दिष्ट चाइल्ड नोड के लिए एकाधिक चिल्ड्रन का मान समान है, तो उन्हें कुंजी द्वारा लेक्सिकोग्राफ़िक रूप से क्रमित किया जाता है।
  6. ऑब्जेक्ट सबसे अंत में आते हैं, और आरोही क्रम में कुंजी द्वारा लेक्सिकोग्राफ़िक रूप से सॉर्ट किए जाते हैं।
फ़िल्टर किए गए परिणाम बिना क्रम के लौटाए जाते हैं। यदि आपके डेटा का क्रम महत्वपूर्ण है, तो आपको फायरबेस से वापस आने के बाद अपने आवेदन में परिणामों को क्रमबद्ध करना चाहिए।

ऑर्डर द्वारा = "$ कुंजी"

अपने डेटा को सॉर्ट करने के लिए orderBy="$key" पैरामीटर का उपयोग करते समय, डेटा निम्नानुसार कुंजी द्वारा आरोही क्रम में वापस आ जाएगा। ध्यान रखें कि कुंजियाँ केवल तार हो सकती हैं।

  1. एक कुंजी वाले बच्चे जिन्हें 32-बिट पूर्णांक के रूप में पार्स किया जा सकता है, पहले आते हैं, आरोही क्रम में क्रमबद्ध होते हैं।
  2. उनकी कुंजी के रूप में एक स्ट्रिंग मान वाले बच्चे आगे आते हैं, आरोही क्रम में लेक्सिकोग्राफ़िक रूप से क्रमबद्ध होते हैं।

ऑर्डर द्वारा = "$ मान"

अपने डेटा को क्रमित करने के लिए orderBy="$value" पैरामीटर का उपयोग करते समय, चिल्ड्रन को उनके मान के अनुसार क्रमित किया जाएगा। ऑर्डर करने का मानदंड चाइल्ड कुंजी द्वारा ऑर्डर किए गए डेटा के समान है, सिवाय नोड के मान को निर्दिष्ट चाइल्ड कुंजी के मान के बजाय उपयोग किया जाता है।

ऑर्डर द्वारा = "$ प्राथमिकता"

अपने डेटा को सॉर्ट करने के लिए orderBy="$priority" पैरामीटर का उपयोग करते समय, बच्चों का क्रम उनकी प्राथमिकता और कुंजी द्वारा निम्नानुसार निर्धारित किया जाता है। ध्यान रखें कि प्राथमिकता वाले मान केवल संख्याएं या स्ट्रिंग हो सकते हैं.

  1. बिना प्राथमिकता वाले बच्चे (डिफ़ॉल्ट) पहले आते हैं।
  2. उनकी प्राथमिकता के रूप में नंबर वाले बच्चे आगे आते हैं। उन्हें संख्यात्मक रूप से प्राथमिकता के आधार पर क्रमबद्ध किया जाता है, छोटे से बड़े तक।
  3. स्ट्रिंग वाले बच्चे उनकी प्राथमिकता के रूप में सबसे अंत में आते हैं। उन्हें प्राथमिकता के आधार पर शब्दकोषीय रूप से क्रमबद्ध किया जाता है।
  4. जब भी दो बच्चों की प्राथमिकता समान होती है (बिना किसी प्राथमिकता के), उन्हें कुंजी द्वारा क्रमबद्ध किया जाता है। न्यूमेरिक कुंजियाँ पहले आती हैं (संख्यात्मक रूप से क्रमबद्ध), उसके बाद शेष कुंजियाँ (लेक्सिकोग्राफ़िक रूप से क्रमबद्ध)।

प्राथमिकताओं पर अधिक जानकारी के लिए, एपीआई संदर्भ देखें।

REST API से स्ट्रीमिंग

फायरबेस रेस्ट एंडपॉइंट्स इवेंटसोर्स / सर्वर-सेंटेड इवेंट्स प्रोटोकॉल का समर्थन करते हैं, जिससे हमारे फायरबेस डेटाबेस में किसी एक स्थान पर परिवर्तनों को स्ट्रीम करना आसान हो जाता है।

स्ट्रीमिंग के साथ आरंभ करने के लिए, हमें निम्नलिखित कार्य करने होंगे:

  1. क्लाइंट के एक्सेप्ट हेडर को text/event-stream पर सेट करें
  2. एचटीटीपी रीडायरेक्ट का सम्मान करें, खास तौर पर एचटीटीपी स्टेटस कोड 307 में
  3. यदि फायरबेस डेटाबेस स्थान को पढ़ने के लिए अनुमति की आवश्यकता है, तो auth क्वेरी पैरामीटर शामिल करें

बदले में, सर्वर नामित घटनाओं को अनुरोधित URL परिवर्तनों पर डेटा की स्थिति के रूप में भेजेगा। इन संदेशों की संरचना EventSource प्रोटोकॉल के अनुरूप है:

event: event name
data: JSON encoded data payload

सर्वर निम्न ईवेंट भेज सकता है:

रखना JSON-एन्कोडेड डेटा दो कुंजियों वाला एक ऑब्जेक्ट होगा: पथ और डेटा
पथ अनुरोध URL के सापेक्ष किसी स्थान की ओर इशारा करता है
क्लाइंट को उस स्थान के सभी डेटा को अपने कैश में संदेश में दिए गए डेटा से बदलना चाहिए
पैबंद JSON-एन्कोडेड डेटा दो कुंजियों वाला एक ऑब्जेक्ट होगा: पथ और डेटा
पथ अनुरोध URL के सापेक्ष किसी स्थान की ओर इशारा करता है
डेटा में प्रत्येक कुंजी के लिए, क्लाइंट को संदेश में उस कुंजी के डेटा के साथ अपने कैश में संबंधित कुंजी को बदलना चाहिए
जिंदा रहो इस घटना के लिए डेटा शून्य है, किसी क्रिया की आवश्यकता नहीं है
रद्द करना इस घटना के लिए डेटा शून्य है
यह घटना तब भेजी जाएगी जब फायरबेस रीयलटाइम डेटाबेस सुरक्षा नियम अनुरोधित स्थान पर पढ़ने की अनुमति नहीं देते हैं
auth_revoked इस घटना के लिए डेटा एक स्ट्रिंग है जो इंगित करता है कि एक क्रेडेंशियल समाप्त हो गया है
यह ईवेंट तब भेजा जाएगा जब आपूर्ति किया गया प्रमाणीकरण पैरामीटर अब मान्य नहीं होगा

सर्वर द्वारा भेजे जा सकने वाले ईवेंट के सेट का एक उदाहरण नीचे दिया गया है:

// Set your entire cache to {"a": 1, "b": 2}
event: put
data: {"path": "/", "data": {"a": 1, "b": 2}}


// Put the new data in your cache under the key 'c', so that the complete cache now looks like:
// {"a": 1, "b": 2, "c": {"foo": true, "bar": false}}
event: put
data: {"path": "/c", "data": {"foo": true, "bar": false}}


// For each key in the data, update (or add) the corresponding key in your cache at path /c,
// for a final cache of: {"a": 1, "b": 2, "c": {"foo": 3, "bar": false, "baz": 4}}
event: patch
data: {"path": "/c", "data": {"foo": 3, "baz": 4}}

यदि आप Go का उपयोग कर रहे हैं, तो Firego को देखें, जो Firebase REST और स्ट्रीमिंग API के आस-पास एक तृतीय-पक्ष आवरण है।