डेटा वापस लाया जा रहा है

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

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

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

अनुरोध स्वीकार किए जाने पर, उसे 200 OK एचटीटीपी स्टेटस कोड और रिस्पॉन्स में वह डेटा शामिल होगा जिसे हम वापस ला रहे हैं.

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

हमारे Firebase डेटाबेस से डेटा पढ़ते समय, REST API कई क्वेरी पैरामीटर को स्वीकार करता है. सबसे ज़्यादा इस्तेमाल किए जाने वाले पैरामीटर यहां दिए गए हैं. पूरी सूची देखने के लिए, 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'

कॉलबैक

वेब ब्राउज़र से सभी डोमेन पर REST कॉल करने के लिए, इनका इस्तेमाल किया जा सकता है जवाब को JavaScript में रैप करने के लिए 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'
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

टाइम आउट

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

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

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

डेटा फ़िल्टर करना

हम कई फ़ैक्टर के आधार पर डेटा को फ़िल्टर करने के लिए क्वेरी बना सकते हैं. सबसे पहले, आपको यह बताना होता है कि orderBy का इस्तेमाल करके, डेटा को कैसे फ़िल्टर करना है पैरामीटर. इसके बाद, orderBy को किसी भी अन्य पांच पैरामीटर से जोड़ा जाता है: limitToFirst, limitToLast, startAt, endAt, और equalTo.

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

{
  "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'

डेटा को ऑर्डर करने का तरीका देखें. इससे आपको पता चलेगा कि null, बूलियन, स्ट्रिंग, और ऑब्जेक्ट वैल्यू को क्रम में लगाने का तरीका orderBy="$value".

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

ज़्यादा मुश्किल क्वेरी बनाने के लिए, हम कई पैरामीटर को मिला सकते हैं.

क्वेरी की सीमा तय करें

limitToFirst और limitToLast पैरामीटर का इस्तेमाल बच्चों की ज़्यादा से ज़्यादा संख्या जिनके लिए डेटा लिया जाना है. अगर हम 100 की सीमा तय करते हैं, तो मिलते-जुलते ज़्यादा से ज़्यादा 100 बच्चे पाएं. अगर हम अपनी विंडो में 100 से कम मैसेज सेव करते हैं, करते हैं, तो हम हर बच्चे की जानकारी पा सकते हैं. हालांकि, यदि हमारे पास 100 से अधिक संदेश हैं, तो हम केवल उनमें से 100 मैसेज के लिए डेटा मिल सकता है. ये सभी ऑर्डर किए गए पहले 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 को मिला सकते हैं. नीचे दिए गए उदाहरण में वे सभी डायनासोर मिले हैं जिनका नाम "b" अक्षर से शुरू होता है:

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. ऑब्जेक्ट आखिरी में आते हैं और उन्हें बढ़ते क्रम में कुंजी के हिसाब से लेक्सिकोग्राफ़िक रूप से लगाया जाता है.
फ़िल्टर किए गए नतीजे बिना क्रम के दिखते हैं. अगर आपके डेटा का क्रम ज़रूरी है, तो आपको Firebase से वापस आने के बाद अपने ऐप्लिकेशन में नतीजों को क्रम से लगाना चाहिए.

OrderBy="$key"

डेटा को क्रम से लगाने के लिए, orderBy="$key" पैरामीटर का इस्तेमाल करने पर डेटा दिखाया जाएगा कुंजी के हिसाब से बढ़ते क्रम में, नीचे दिया गया तरीका अपनाएं. ध्यान रखें कि कुंजियां सिर्फ़ स्ट्रिंग हो सकती हैं.

  1. जिन बच्चों के पास कुंजी होती है उन्हें 32-बिट वाले पूर्णांक के तौर पर पार्स किया जा सकता है, वे पहले आते हैं. इन्हें बढ़ते क्रम में लगाया जाता है ऑर्डर.
  2. जिन बच्चों में स्ट्रिंग वैल्यू आगे आती है उन्हें बढ़ते क्रम में अलग-अलग शब्दों में समझा जाता है ऑर्डर.

OrderBy="$value"

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

OrderBy="$प्राथमिकता"

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

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

प्राथमिकताओं के बारे में ज़्यादा जानकारी पाने के लिए, यह देखें एपीआई का संदर्भ.

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

Firebase REST एंडपॉइंट, EventSource / सर्वर से भेजे गए इवेंट प्रोटोकॉल की मदद से, हमारी सेवाओं में एक ही जगह पर होने वाले बदलावों को आसानी से स्ट्रीम किया जा सकता है Firebase डेटाबेस.

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

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

इसके बदले में, सर्वर, अनुरोध किए गए यूआरएल पर डेटा की स्थिति के तौर पर नाम वाले इवेंट भेजेगा बदलाव. इन मैसेज की बनावट EventSource प्रोटोकॉल के मुताबिक है:

event: event name
data: JSON encoded data payload

सर्वर नीचे दिए गए इवेंट भेज सकता है:

रखें JSON कोड में बदला गया डेटा, दो कुंजियों वाला एक ऑब्जेक्ट होगा: पाथ और डेटा
पाथ, अनुरोध किए गए यूआरएल से मिलती-जुलती जगह दिखाता है
क्लाइंट को कैश मेमोरी में मौजूद उस जगह के सभी डेटा को मैसेज में दिए गए डेटा से बदलना होगा
पैच JSON कोड में बदला गया डेटा, दो कुंजियों वाला एक ऑब्जेक्ट होगा: पाथ और डेटा
पाथ, अनुरोध किए गए यूआरएल से मिलती-जुलती जगह दिखाता है
डेटा में मौजूद हर कुंजी के लिए, क्लाइंट को कैश मेमोरी से जुड़ी कुंजी को मैसेज में मौजूद कुंजी के डेटा से बदलना चाहिए
कीप-अलाइव इस इवेंट के लिए डेटा शून्य है, किसी कार्रवाई की ज़रूरत नहीं है
रद्द करें इस इवेंट का डेटा शून्य है
यह इवेंट तब भेजा जाएगा, जब Firebase रीयल टाइम डेटाबेस के सुरक्षा नियमों की वजह से, अनुरोध की गई जगह पर पढ़ने की अनुमति नहीं होगी
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 और स्ट्रीमिंग एपीआई के आस-पास तीसरे पक्ष का रैपर.