डिजिटल सप्लायर API इंटीग्रेशन की आम गलतियाँ
सप्लायर इंटीग्रेशन वहाँ नहीं टूटता जहाँ टीमें उम्मीद करती हैं। हैप्पी पाथ — ऑर्डर बनाओ, कोड पाओ — एक दिन में लिख जाता है। बाकी सारा समय उन स्टेट्स में जाता है जिन्हें पहले वर्ज़न में किसी ने मॉडल नहीं किया। नीचे इस उद्योग में सबसे ज़्यादा दिखने वाले आठ फ़ेल्योर मोड हैं, हर एक के ठोस फ़िक्स के साथ।
1. डिडुप के बिना रिट्राई → डुप्लिकेट ऑर्डर
क्या होता है। आपकी सर्विस POST /orders भेजती है। सप्लायर ऑर्डर बनाकर फ़ुलफ़िलमेंट शुरू करता है, पर रिस्पॉन्स नेटवर्क पर खो जाता है। आपका HTTP क्लाइंट अपनी नीति से रिट्राई करता है। सप्लायर को नई रिक्वेस्ट दिखती है, वह दूसरा ऑर्डर बनाकर डिपॉज़िट फिर डेबिट करता है। ग्राहक को एक कोड मिला; आपने दो के पैसे दिए।
कई इंटीग्रेटर मानते हैं कि आइडेम्पोटेंसी हेडर यहाँ बचा लेता है। जाँचें कि आपका सप्लायर सचमुच इसे लागू करता है या नहीं — बहुत सारे सर्वर-साइड डिडुप नहीं करते, और "एहतियातन" हेडर भेजने से कुछ नहीं होता।
फ़िक्स। डिडुप हमेशा अपनी तरफ़ करें:
- API कॉल से पहले अपनी UUID के साथ लोकल
pendingरिकॉर्ड लिखें। - ऑर्डर क्रिएशन कॉल करें।
- सफलता पर सप्लायर की ऑर्डर ID उसी रिकॉर्ड में रखें।
- टाइमआउट या नेटवर्क एरर पर अंधा रिट्राई न करें — ऑर्डर लिस्ट क्वेरी करें और SKU, मात्रा व समय-विंडो पर मैच खोजें।
- नया ऑर्डर सिर्फ़ तभी बनाएँ जब मैच न मिले।
यह पैटर्न विस्तार से आइडेम्पोटेंसी और सुरक्षित रिट्राई में खोला गया है।
2. वेबहुक को गारंटी मानना
क्या होता है। हैंडलर ऐसे लिखा गया है मानो हर इवेंट ठीक एक बार और सख़्त क्रम में आएगा। हक़ीक़त में वेबहुक आपके अपने डिप्लॉय में खोते हैं, भेजने वाले के रिट्राई के बाद दो बार आते हैं, और एक-दूसरे से आगे निकल जाते हैं — completed processing से पहले आ सकता है।
नतीजा: बीच की स्टेट में हमेशा के लिए अटके ऑर्डर, और दो बार डिलीवर हुए कोड, क्योंकि री-डिलीवरी को नया इवेंट मानकर प्रोसेस कर लिया गया।
फ़िक्स।
- हैंडलर आइडेम्पोटेंट हो: उसी ID वाला दोहराया इवेंट स्टेट न बदले।
- मोनोटोनिसिटी लागू करें: पहले से दर्ज स्टेट से पुरानी स्थिति बताने वाला इवेंट नज़रअंदाज़ करें।
- वेबहुक को संकेत मानें, तथ्य नहीं — मिलते ही API से ऑर्डर स्टेटस पढ़ें और जो API ने लौटाया वही दर्ज करें।
- लंबे समय तक टर्मिनल स्टेट में न पहुँचे ऑर्डर के लिए पोलिंग सेफ़्टी नेट रखें।
अगर आपका सप्लायर वेबहुक देता ही नहीं, तो पोलिंग एकमात्र तंत्र बन जाती है — इसे सही तरीके से बनाना ऑर्डर स्टेटस ट्रैकिंग में कवर है।
3. बैकऑफ़ और जिटर के बिना रिट्राई
क्या होता है। सप्लायर 429 या 503 लौटाता है। आपका क्लाइंट तय एक सेकंड बाद, दस थ्रेड में, हर अटके ऑर्डर के लिए एक साथ रिट्राई करता है। आप उसकी छोटी गिरावट को टिकाऊ स्टॉर्म में बदल देते हैं, उसे लंबा खींचते हैं, और लंबे रेट-लिमिट बैन का जोखिम लेते हैं।
फ़िक्स।
- सीलिंग के साथ एक्सपोनेंशियल बैकऑफ़ और रैंडम जिटर, ताकि क्लाइंट सिंक्रोनाइज़ न हों।
- सिर्फ़ वही रिट्राई करें जो रिट्राई-सेफ़ है:
GETहमेशा, ऑर्डर क्रिएशन केवल बिंदु 1 की स्कीम से। - एरर क्लास अलग करें: ग़लत इनपुट का
4xxरिट्राई बेमानी है,429और5xxलायक हैं परRetry-Afterका सम्मान ज़रूरी। - सर्किट ब्रेकर जोड़ें: लगातार फ़ेल्योर के बाद ठोकना बंद करें और ट्रैफ़िक वैकल्पिक सोर्स पर भेजें।
4. रीकंसिलिएशन जॉब का न होना
क्या होता है। जब तक सब चलता है, कोई अपने डेटा की सप्लायर के डेटा से तुलना नहीं करता। अंतर चुपचाप जमा होते हैं: ऑर्डर पेड पर कोड दर्ज नहीं; कोड दर्ज पर बिक्री रद्द; डिपॉज़िट डेबिट पर सफल डिलीवरी नहीं। यह महीने भर बाद सामने आता है, जब लॉग रोटेट हो चुके हों और सप्लायर की क्लेम विंडो बंद हो चुकी हो।
फ़िक्स। तीन सूचियों पर रोज़ाना ऑटोमेटेड रीकंसिलिएशन: आपकी बिक्री, सप्लायर ऑर्डर, डिपॉज़िट मूवमेंट। जॉब को मिसमैच अलग टेबल में लिखकर ऑपरेटर के लिए टास्क बनाना चाहिए, सिर्फ़ लॉग नहीं करना। अलग से "अटके" ऑर्डर स्कैन करें जो उचित समय से ज़्यादा टर्मिनल स्टेट से बाहर बैठे हैं।
5. प्लेनटेक्स्ट कोड और लॉग में कोड
क्या होता है। की और PIN डेटाबेस में प्लेनटेक्स्ट पड़े हैं और डिबग लॉग, APM ट्रेस व सपोर्ट ईमेल में रिस जाते हैं। एक डेटाबेस डंप या एक ज़्यादा उत्साही लॉग एग्रीगेटर, और पूरी संपत्ति बाहर चली जाती है।
दाँव समझें: डिजिटल कोड बेयरर इंस्ट्रूमेंट है। न रिडेम्पशन पलटा जा सकता है, न वापस खींचा जा सकता है।
फ़िक्स।
- सीक्रेट्स मैनेजर में रखी समर्पित की से रेस्ट पर एन्क्रिप्शन।
- लॉग, ट्रेस और एरर स्ट्रिंग में कोड पर सख़्त पाबंदी, लॉगर में ही रिडैक्शन फ़िल्टर।
- डिक्रिप्शन अधिकार न्यूनतम सर्विस सूची तक सीमित, हर एक्सेस का ऑडिट।
- रिटेंशन पॉलिसी: डिस्प्यूट विंडो पार कर चुके डिलीवर्ड कोड अनिश्चित काल तक न रखें।
6. पार्शियल फ़ुलफ़िलमेंट और स्टॉकआउट को नज़रअंदाज़ करना
क्या होता है। दस यूनिट ऑर्डर, सात डिलीवर। कोड रिस्पॉन्स को बूलियन सफल/असफल मानता है और या तो ग्राहक को सात कोड देकर दस के पैसे लेता है, या पूरे ऑर्डर को फ़ेल मानकर कुछ नहीं देता जबकि सात पहले ही डेबिट हो चुके हैं।
स्टॉकआउट और रिवोकेशन भी इसी श्रेणी में हैं: दोनों सामान्य स्टेट हैं, हादसे नहीं।
फ़िक्स।
- ऑर्डर को प्रति लाइन आइटम मॉडल करें — स्टेटस और नतीजा आइटम स्तर पर रहें, पूरे ऑर्डर पर नहीं।
- स्पष्ट स्टेट रखें:
fulfilled,partially_fulfilled,out_of_stock,failed,revoked। - पार्शियल फ़ुलफ़िलमेंट की नीति तय करें: जो आया वह दें, जो नहीं आया उसका रिफंड करें, बाक़ी वैकल्पिक सोर्स से दोबारा ऑर्डर करें।
- स्टोरफ़्रंट पर एरर की जगह ईमानदार स्टेटस दिखाएँ, और बैकएंड में वैकल्पिक SKU या रीजन पर रूट करें, जैसा मल्टी-सोर्स फ़ुलफ़िलमेंट रूटिंग में बताया है।
7. सैंडबॉक्स और फ़ेल्योर टेस्टिंग का न होना
क्या होता है। इंटीग्रेशन तीन सफल ऑर्डर से जाँचकर शिप कर दिया गया। पहला टाइमआउट, पहला 429 और पहला आंशिक रूप से पूरा ऑर्डर असली पैसे और असली ग्राहकों के साथ मिलते हैं।
फ़िक्स।
- सप्लायर का टेस्ट मोड हो तो इस्तेमाल करें, और हैप्पी पाथ से आगे जाएँ: फ़ेल्योर, टाइमआउट, पार्शियल फ़ुलफ़िलमेंट, अपर्याप्त डिपॉज़िट, अनुपलब्ध SKU।
- अपनी तरफ़ मॉक से टेस्ट करें जो लेटेंसी, टूटे कनेक्शन और डुप्लिकेट इवेंट डालता हो।
- ऑर्डर चलते हुए डिप्लॉय पर क्या होता है, यह अलग से जाँचें — सबसे कम आँका गया परिदृश्य।
- कवर करने लायक पूरा स्टेट सेट ऑर्डर फ़्लो में दिया है।
8. हार्डकोडेड FX और मानी हुई करेंसी
क्या होता है। कन्वर्ज़न रेट कोड में कॉन्स्टेंट है, या ऐप स्टार्ट पर एक बार पढ़ा गया है। एक महीने बाद आप लागत से नीचे बेच रहे हैं और समझ नहीं पाते मार्जिन कहाँ गया। उसी गलती का दूसरा रूप: यह मानना कि API के दाम हमेशा एक ही करेंसी में आएँगे।
फ़िक्स।
- रेट स्पष्ट स्रोत, रिफ़्रेश टाइमस्टैम्प और हलचल के बफ़र के साथ कॉन्फ़िगरेबल पैरामीटर हो — कॉन्स्टेंट नहीं।
- करेंसी API रिस्पॉन्स से पढ़ें, मानें नहीं।
- सारी मौद्रिक वैल्यू माइनर यूनिट में पूर्णांक रखें; पैसे के लिए फ़्लोट कभी नहीं।
- हर ऑर्डर पर लागू रेट लॉग करें — इसके बिना बाद में मार्जिन रीकंसिलिएशन असंभव है।
- FX अंतिम लागत में कैसे जुड़ता है, यह रीसेलर डिस्काउंट कैसे तय होती है में है।
लॉन्च से पहले चेकलिस्ट
| जाँच | हो गया? |
|---|---|
| API कॉल से पहले लोकल पेंडिंग रिकॉर्ड लिखा जाता है | |
| ऑर्डर क्रिएशन रिट्राई मौजूदा-ऑर्डर लुकअप से गुज़रता है | |
| इवेंट हैंडलर आइडेम्पोटेंट है और पुराने इवेंट छोड़ता है | |
| रिट्राई में एक्सपोनेंशियल बैकऑफ़, जिटर और सर्किट ब्रेकर | |
| बिक्री, ऑर्डर और डिपॉज़िट का रोज़ाना रीकंसिलिएशन | |
| कोड एन्क्रिप्टेड, लॉग व ट्रेस से अनुपस्थित | |
| पार्शियल फ़ुलफ़िलमेंट और स्टॉकआउट स्पष्ट स्टेट हैं | |
| फ़ेल्योर पाथ टेस्टेड, सिर्फ़ हैप्पी पाथ नहीं | |
| FX कॉन्फ़िगरेबल, करेंसी रिस्पॉन्स से पढ़ी जाती है |
इन्वेंट्री कहाँ से लें
इस सूची की आधी समस्याएँ कोड से नहीं, सप्लायर चुनने से तय होती हैं: साफ़ ऑर्डर-स्टेटस मॉडल, स्टॉक कम होने पर ईमानदार स्टेट, और इतना चौड़ा कैटलॉग कि आपको पाँच अलग बग-सेट वाले पाँच इंटीग्रेशन न सँभालने पड़ें। FoxReload की, गिफ्ट कार्ड, टॉप-अप, eSIM और सॉफ़्टवेयर लाइसेंस में 900+ SKU एक REST API के पीछे ऑटो-डिलीवरी के साथ देता है — यानी एक कॉन्ट्रैक्ट, एक रिट्राई नीति और एक रीकंसिलिएशन जॉब, चिड़ियाघर नहीं।
आगे स्वाभाविक पाठ हैं API क्विकस्टार्ट और प्री-परचेज़्ड स्टॉक बनाम ऑन-डिमांड फ़ुलफ़िलमेंट, जो तय करता है कि इस सूची का कितना हिस्सा आपको लागू करना ही पड़ेगा।
