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

GET . के साथ डेटा पढ़ना

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

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

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

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

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

प्रमाणन

auth अनुरोध पैरामीटर Firebase रीयलटाइम डेटाबेस नियमों द्वारा संरक्षित डेटा तक पहुंच की अनुमति देता है, और सभी अनुरोध प्रकारों द्वारा समर्थित है। तर्क या तो आपके Firebase ऐप्लिकेशन का रहस्य या प्रमाणीकरण टोकन हो सकता है, जैसा कि Firebase प्रोजेक्ट में उपयोगकर्ता में बताया गया है। निम्नलिखित उदाहरण में हम एक 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'

वापस कॉल करें

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

<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 के मान के साथ सॉर्ट किया जाएगा। डेटा कैसे ऑर्डर किया जाता है, इसके विवरण के लिए, डेटा कैसे ऑर्डर किया जाता है देखें।

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

{
  "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 आदेशित संदेश होंगे या यदि हम limitToFirst का उपयोग कर रहे हैं तो अंतिम 100 आदेशित संदेश limitToLast

हमारे डायनासोर तथ्य डेटाबेस और 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 का उपयोग कर सकते हैं जिनके नाम पटरोडैक्टाइल से पहले आते हैं:

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. जब भी दो बच्चों की प्राथमिकता समान होती है (बिना किसी प्राथमिकता के), तो उन्हें कुंजी द्वारा क्रमबद्ध किया जाता है। संख्यात्मक कुंजियाँ पहले आती हैं (संख्यात्मक रूप से क्रमबद्ध), उसके बाद शेष कुंजियाँ (शब्दकोश के अनुसार क्रमबद्ध)।

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

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

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

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

  1. क्लाइंट के एक्सेप्ट हेडर को text/event-stream पर सेट करें
  2. HTTP रीडायरेक्ट का सम्मान करें, विशेष रूप से HTTP स्थिति कोड 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}}

यदि आप गो का उपयोग कर रहे हैं, तो फ़ायरबेस आरईएसटी और स्ट्रीमिंग एपीआई के आस-पास एक तृतीय-पक्ष रैपर फ़ायरगो देखें।