एक ऑर्डर अपडेट के दो उपभोक्ता हो सकते हैं: आपका डेटाबेस और ऑर्डर पेज देख रहा ग्राहक। कनेक्शन टूटने पर दोनों को अलग-अलग रिकवरी व्यवहार चाहिए।
आपके डेटाबेस को इवेंट का एक रिकवर करने योग्य रिकॉर्ड चाहिए। ग्राहक के पेज को दोबारा कनेक्ट होने के बाद शायद केवल नवीनतम ऑर्डर स्टेट चाहिए।
चार विकल्प क्या हैं?
Bird webhooks, Realtime, एक डैशबोर्ड इवेंट स्ट्रीम और API reads जिन्हें आप poll कर सकते हैं, प्रदान करता है।
अपने सर्वर पर इवेंट्स प्राप्त करने के लिए webhooks का उपयोग करें। कनेक्टेड क्लाइंट्स को अपडेट करने के लिए Realtime का उपयोग करें। SSE स्ट्रीम डैशबोर्ड सेशन को रिसोर्स परिवर्तन भेजती है। Polling आपके एप्लिकेशन को शेड्यूल पर रिसोर्स स्टेट पढ़ने देता है।
| मैकेनिज़्म | दिशा | ऑथेंटिकेशन | डिस्कनेक्शन के बाद रिकवरी |
|---|---|---|---|
| Webhooks | Bird आपके सर्वर को भेजता है। | आपका रिसीवर अपने endpoint secret से सिग्नेचर सत्यापित करता है। | विफल डिलीवरी पर फिर से प्रयास होता है। छूटे इवेंट्स को रीप्ले किया जा सकता है। |
| Realtime | आपका सर्वर कनेक्टेड क्लाइंट्स को पब्लिश करता है। | क्लाइंट्स app key से कनेक्ट करते हैं। प्राइवेट सब्सक्रिप्शन के लिए बैकएंड ऑथराइज़ेशन चाहिए। | दोबारा कनेक्ट होने वाले क्लाइंट्स को स्टेट रिकवरी चाहिए। |
| SSE स्ट्रीम | Bird डैशबोर्ड सेशन को रिसोर्स परिवर्तन भेजता है। | एक डैशबोर्ड सेशन cookie। | रिसोर्स की स्टेट के लिए उसे दोबारा पढ़ें। |
| Polling | आपका एप्लिकेशन Bird से स्टेट माँगता है। | एक API key। | बाद में पढ़ने पर रिसोर्स स्टेट मिलती है, हर ट्रांज़िशन को फिर से बनाए बिना। |
Webhooks कब सही उत्तर है?
जब आपके सर्वर को इवेंट्स पर कार्रवाई करनी हो और छूटी डिलीवरी रिकवर करनी हो तब webhooks का उपयोग करें।
आप एक सार्वजनिक रूप से पहुँच योग्य HTTPS endpoint रजिस्टर करते हैं। इसे ज़रूरी इवेंट टाइप्स के लिए सब्सक्राइब करें। आपका रिसीवर पहले सिग्नेचर सत्यापित करता है। फिर इवेंट स्टोर करता है। धीमी प्रोसेसिंग शुरू होने से पहले डिलीवरी एक्नॉलेज करता है।
Bird टाइमिंग समायोजन से पहले लगभग 27.5 घंटों में अधिकतम आठ प्रयास करता है। यह विंडो रिसीवर को आउटेज से रिकवर होने का समय देती है। छूटे-इवेंट रीप्ले एक अतिरिक्त रिकवरी पथ प्रदान करता है।
webhook-id पर डीडुप्लिकेट करें क्योंकि एक ही इवेंट बार-बार आ सकता है। स्टेट ओवरराइट करने से पहले इवेंट occurrence times की तुलना करें क्योंकि इवेंट्स क्रम से बाहर आ सकते हैं।
विफल webhook पुनः प्रयास रिकवरी सीमाओं को कवर करता है। डुप्लिकेट हैंडलिंग सफलता लौटाने से पहले इवेंट को सुरक्षित रूप से स्टोर करना कवर करता है।
मुझे इसके बजाय Realtime कब उपयोग करना चाहिए?
जब किसी कनेक्टेड ब्राउज़र या एप्लिकेशन को आपके सर्वर द्वारा पब्लिश किए गए अपडेट्स चाहिए तब Realtime का उपयोग करें।
एक चैनल एक नामित गंतव्य है जिसे क्लाइंट्स सब्सक्राइब करते हैं। आपका सर्वर उस नाम पर इवेंट पब्लिश करता है, और सब्सक्राइब किए क्लाइंट्स इसे अपने कनेक्शन पर प्राप्त करते हैं। इससे ऑर्डर पेज, चैट वार्तालाप या प्रगति डिस्प्ले बिना रिफ़्रेश के अपडेट हो सकता है।
Realtime डिस्कनेक्ट हुए क्लाइंट के छूटे हर इवेंट को रीप्ले नहीं करता। अपने डेटाबेस में स्थायी स्टेट रखें और दोबारा कनेक्ट होने के बाद व्यू रीस्टोर करें।
एक cache चैनल नए सब्सक्राइबर्स के लिए अपना नवीनतम इवेंट तब तक रखता है जब तक वह cached मान उपलब्ध है। यह कोई इवेंट इतिहास नहीं रखता। अगर क्लाइंट ऑफ़लाइन रहते हुए दो अपडेट होते हैं, तो cached नवीनतम मान बीच के अपडेट को रिकवर नहीं कर सकता।
App key क्लाइंट कोड में दिखती है, इसलिए वह key रखने वाला कोई भी विज़िटर पब्लिक चैनल पढ़ सकता है। private- से शुरू होने वाले चैनल के लिए आपके बैकएंड को सब्सक्रिप्शन ऑथराइज़ करना होगा। presence- चैनल सब्सक्राइब किए सदस्यों की पहचान भी साझा करता है।
चैनल नाम अक्षरों, अंकों और _ - = @ , . ; का उपयोग करते हुए 1 से 164 कैरेक्टर स्वीकार करते हैं। प्रीफ़िक्स इस सीमा का हिस्सा है, इसलिए जनरेट किए गए नाम को मान्य करते समय इसे शामिल करें।
Realtime तब भी webhooks भेजता है जब किसी चैनल को उसका पहला सब्सक्राइबर मिलता है या आखिरी खो जाता है। Membership webhooks रिपोर्ट करते हैं कि कौन से सदस्य जुड़े या गए। इन्हें डैशबोर्ड से कॉन्फ़िगर करें। Publish/subscribe बनाम webhooks बताता है कि ये दोनों मैकेनिज़्म कैसे साथ काम करते हैं।
क्या Bird का कोई SSE endpoint है?
Bird का एक SSE endpoint, getEventsStream, ऑथेंटिकेटेड डैशबोर्ड सेशन के लिए है।
GET /v1/events/stream API रिसोर्सेज़ में परिवर्तन रिपोर्ट करता है। एक नोटिफ़िकेशन रिसोर्स टाइप, आइडेंटिफ़ायर और occurrence time की पहचान करता है ताकि डैशबोर्ड रिसोर्स का डेटा फ़ेच कर सके।
यह endpoint एक डैशबोर्ड सेशन cookie स्वीकार करता है। यह API key स्वीकार नहीं करता, इसलिए API-key इंटीग्रेशन के लिए webhooks या polling का उपयोग करें।
Polling कब सही है?
जब आपको रिसोर्स स्टेट चाहिए, इनकमिंग रिक्वेस्ट प्राप्त नहीं कर सकते या परिवर्तन के लिए कोई पब्लिक इवेंट नहीं है तब polling का उपयोग करें।
यह जाँचने के लिए poll करें कि किसी कैरियर ने आपके टोल-फ़्री नंबर को टेक्स्ट भेजने के लिए स्वीकृत किया है या नहीं। Bird के पास उस सत्यापन निर्णय के लिए कोई पब्लिक webhook इवेंट नहीं है। bird sms tfn verifications get या संबंधित agent tool के ज़रिए शेड्यूल पर सत्यापन पढ़ें। कमांड ऑपरेशन पब्लिक API बंडल के बाहर है।
Polling उस नेटवर्क के लिए भी काम करता है जो आउटबाउंड रिक्वेस्ट की अनुमति देता है लेकिन रिसीवर एक्सपोज़ नहीं कर सकता। अगर आपको केवल वर्तमान स्टेट चाहिए, तो रिसोर्स पढ़ने से पिछले इवेंट्स से इसे फिर से बनाने की ज़रूरत नहीं रहती।
Reads और lists एक संगठन के भीतर प्रति acting credential अनुरोध दर सीमा बजट खर्च करते हैं। HTTP 429 प्रतिक्रिया के बाद दोबारा अनुरोध करने से पहले प्रतीक्षा करें। अंतराल को इस बात से मिलाएँ कि आपके एप्लिकेशन को कितनी जल्दी परिवर्तन का पता लगाना है।
Webhooks, Realtime और अनुरोध दर सीमाएँ इन पथों के कॉन्फ़िगरेशन को कवर करते हैं।
मुझे कौन सा चुनना चाहिए?
यह चुनें कि अपडेट कौन उपभोग करता है और डिस्कनेक्शन के बाद क्या बचना चाहिए।
- Webhooks जब आपके सर्वर को फिर से प्रयास और छूटे-इवेंट रिकवरी के साथ इवेंट्स प्रोसेस करने हों।
- Realtime जब कनेक्टेड स्क्रीन को अपडेट चाहिए और दोबारा कनेक्ट होने पर संग्रहीत स्टेट से रिकवर कर सकें।
- Polling जब आपको रिसोर्स स्टेट चाहिए, रिसीवर एक्सपोज़ नहीं कर सकते या कोई पब्लिक इवेंट नहीं है।
- SSE स्ट्रीम एक ऑथेंटिकेटेड Bird डैशबोर्ड सेशन के लिए।
संक्षेप में
सर्वर-साइड इवेंट हैंडलिंग के लिए webhooks चुनें।
जब आपके सर्वर को आउटेज के बाद डिलीवरी रिकवर करनी हो तो फिर से प्रयास और छूटे-इवेंट रीप्ले का उपयोग करें।
कनेक्टेड स्क्रीन के लिए Realtime चुनें।
क्लाइंट के दोबारा कनेक्ट होने पर संग्रहीत स्टेट से व्यू रीस्टोर करें।
रिसोर्स स्टेट के लिए polling चुनें।
जब आप रिसीवर एक्सपोज़ नहीं कर सकते, कोई पब्लिक इवेंट नहीं है या केवल रिसोर्स की स्टेट चाहिए तब poll करें।
Bird डैशबोर्ड सेशन के लिए SSE का उपयोग करें।
स्ट्रीम के लिए डैशबोर्ड सेशन ऑथेंटिकेशन आवश्यक है।