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
उपयोग करते समय, निर्दिष्ट चाइल्ड कुंजी वाले डेटा को निम्नानुसार ऑर्डर किया जाएगा:
- निर्दिष्ट चाइल्ड कुंजी के लिए
null
मान वाले बच्चे पहले आते हैं। - निर्दिष्ट चाइल्ड कुंजी के लिए
false
मान वाले बच्चे अगले आते हैं। यदि एकाधिक बच्चों के पासfalse
का मान है, तो उन्हें कुंजी द्वारा शब्दकोषीय रूप से क्रमबद्ध किया जाता है। - निर्दिष्ट चाइल्ड कुंजी के लिए
true
मान वाले बच्चे अगले आते हैं। यदि एकाधिक बच्चों के पासtrue
का मान है, तो उन्हें कुंजी के आधार पर शब्दकोषीय रूप से क्रमबद्ध किया जाता है। - संख्यात्मक मान वाले बच्चे आरोही क्रम में क्रमबद्ध होकर अगले आते हैं। यदि एकाधिक बच्चों के पास निर्दिष्ट चाइल्ड नोड के लिए समान संख्यात्मक मान है, तो उन्हें कुंजी द्वारा क्रमबद्ध किया जाता है।
- स्ट्रिंग्स संख्याओं के बाद आती हैं, और आरोही क्रम में शब्दकोषीय रूप से क्रमबद्ध की जाती हैं। यदि एकाधिक बच्चों के पास निर्दिष्ट चाइल्ड नोड के लिए समान मान है, तो उन्हें कुंजी द्वारा लेक्सिकोग्राफ़िक रूप से क्रमबद्ध किया जाता है।
- वस्तुएँ सबसे अंत में आती हैं, और आरोही क्रम में कुंजी के अनुसार शब्दकोषीय रूप से क्रमबद्ध की जाती हैं।
orderBy='$key'
अपने डेटा को सॉर्ट करने के लिए orderBy="$key"
पैरामीटर का उपयोग करते समय, डेटा निम्नानुसार कुंजी द्वारा आरोही क्रम में लौटाया जाएगा। ध्यान रखें कि कुंजियाँ केवल स्ट्रिंग हो सकती हैं।
- एक कुंजी वाले बच्चे जिन्हें 32-बिट पूर्णांक के रूप में पार्स किया जा सकता है, आरोही क्रम में क्रमबद्ध पहले आते हैं।
- कुंजी के रूप में स्ट्रिंग मान वाले बच्चे अगले आते हैं, उन्हें आरोही क्रम में शब्दकोषीय रूप से क्रमबद्ध किया जाता है।
orderBy='$मूल्य'
अपने डेटा को सॉर्ट करने के लिए orderBy="$value"
पैरामीटर का उपयोग करते समय, बच्चों को उनके मूल्य के आधार पर ऑर्डर किया जाएगा। ऑर्डरिंग मानदंड चाइल्ड कुंजी द्वारा ऑर्डर किए गए डेटा के समान है, सिवाय इसके कि निर्दिष्ट चाइल्ड कुंजी के मान के बजाय नोड के मूल्य का उपयोग किया जाता है।
orderBy='$प्राथमिकता'
अपने डेटा को सॉर्ट करने के लिए orderBy="$priority"
पैरामीटर का उपयोग करते समय, बच्चों का क्रम उनकी प्राथमिकता और कुंजी द्वारा निम्नानुसार निर्धारित किया जाता है। ध्यान रखें कि प्राथमिकता मान केवल संख्याएँ या स्ट्रिंग हो सकते हैं।
- बिना प्राथमिकता वाले (डिफ़ॉल्ट) बच्चे पहले आते हैं।
- प्राथमिकता वाले नंबर वाले बच्चे अगले नंबर पर आते हैं। उन्हें छोटे से बड़े तक, प्राथमिकता के आधार पर संख्यात्मक रूप से क्रमबद्ध किया जाता है।
- डोरी वाले बच्चे उनकी प्राथमिकता में सबसे आखिर में आते हैं। उन्हें प्राथमिकता के आधार पर शब्दकोषीय रूप से क्रमबद्ध किया जाता है।
- जब भी दो बच्चों की प्राथमिकता समान होती है (बिना किसी प्राथमिकता के), तो उन्हें कुंजी के आधार पर क्रमबद्ध किया जाता है। संख्यात्मक कुंजियाँ पहले आती हैं (संख्यात्मक रूप से क्रमबद्ध), उसके बाद शेष कुंजियाँ आती हैं (शब्दावली के अनुसार क्रमबद्ध)।
प्राथमिकताओं के बारे में अधिक जानकारी के लिए एपीआई संदर्भ देखें।
REST API से स्ट्रीमिंग
फायरबेस REST एंडपॉइंट्स इवेंटसोर्स / सर्वर-सेंटेड इवेंट प्रोटोकॉल का समर्थन करते हैं, जिससे हमारे फायरबेस डेटाबेस में किसी एक स्थान पर परिवर्तनों को स्ट्रीम करना आसान हो जाता है।
स्ट्रीमिंग शुरू करने के लिए, हमें निम्नलिखित कार्य करने होंगे:
- क्लाइंट के एक्सेप्ट हेडर को
text/event-stream
पर सेट करें - HTTP रीडायरेक्ट का सम्मान करें, विशेष रूप से HTTP स्थिति कोड 307 का
- यदि फायरबेस डेटाबेस स्थान को पढ़ने के लिए अनुमति की आवश्यकता है तो
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}}
यदि आप गो का उपयोग कर रहे हैं, तो फायरबेस आरईएसटी और स्ट्रीमिंग एपीआई के आसपास एक तृतीय-पक्ष रैपर फायरगो देखें।