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

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

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

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

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

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

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

प्रमाणन

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

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 का उपयोग कर सकते हैं। REST API आपके द्वारा निर्दिष्ट कॉलबैक फ़ंक्शन में लौटाए गए डेटा को लपेटने के लिए 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 के मान के साथ क्रमबद्ध किया जाएगा। डेटा कैसे ऑर्डर किया जाता है, इसके विवरण के लिए, डेटा कैसे ऑर्डर किया जाता है देखें।

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

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

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'

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

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

orderBy='$मूल्य'

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

orderBy='$प्राथमिकता'

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

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

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

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

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

स्ट्रीमिंग शुरू करने के लिए, हमें निम्नलिखित कार्य करने होंगे:

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

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

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}}

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