मैं एक सर्वर से क्लाइंट (जेएस एक ब्राउज़र में) के लिए कुछ एपीआई डिज़ाइन के साथ एक चौराहे पर हूं। हम प्रभाव में सुरक्षा लॉक के कारण किसी कार्रवाई की विफलता का प्रतिनिधित्व करने के लिए HTTP 409 संघर्ष का उपयोग करते हैं। Satefy लॉक हमारे ग्राहकों की उत्पादन प्रणाली में गलती से बदलाव करने से देवों को रोकता है। मुझे यह बताने के लिए क्लाइंट पर 409s को थोड़ा और इनायत से निपटने का काम सौंपा गया है कि एक विशेष एपीआई कॉल विफल क्यों हुआ।
मेरा समाधान यह था कि हमारे AJAX कॉल में से किसी एक की विफलता हैंडलर को लपेट दिया जाए, जो क्लाइंट पर एक सूचना प्रदर्शित करेगा जब 409 के कारण कुछ विफल हो जाता है - यह सब ठीक है और अन्य 4XX और 5XX त्रुटियों के साथ अच्छी तरह से काम करता है जो समान तंत्र का उपयोग करते हैं।
एक समस्या उत्पन्न हुई है जहां हमारे मार्ग संचालकों में से एक 409s के साथ प्रतिक्रिया करता है जब एक व्यापार तर्क त्रुटि का सामना करता है - मेरा AJAX आवरण रिपोर्ट करता है कि सुरक्षा लॉक चालू है, जबकि ग्राहक की मौजूदा विफलता हैंडलर रिपोर्ट करता है कि (यह सोचता है) समस्या शरीर पर आधारित है प्रतिक्रिया की। एक सरल समाधान यह होगा कि हैंडलर की प्रतिक्रिया या स्थिति कोड को हम सुरक्षा लॉक का प्रतिनिधित्व करने के लिए बदल दें।
जो मुझे अपने चौराहे पर लाता है: क्या व्यावसायिक तर्क त्रुटियों का प्रतिनिधित्व करने के लिए HTTP स्थिति कोड का भी उपयोग किया जाना चाहिए? यह सवाल उसी मुद्दे को संबोधित करता है जिसका मैं सामना कर रहा हूं लेकिन यह बहुत अधिक लाभ नहीं उठा पाया। जैसा कि लिंक किए गए उत्तर में सुझाया गया है, मैं व्यापार तर्क के भीतर विफलता का प्रतिनिधित्व करने के लिए एक उपयुक्त निकाय के साथ HTTP 200 ओके का उपयोग करने की ओर झुक रहा हूं।
क्या किसी को यहाँ कोई मजबूत राय है? क्या कोई मुझे समझाने में सक्षम है यह विफलता का प्रतिनिधित्व करने का गलत तरीका है?
400 Bad Requestएक कंबल HTTP कोड के रूप में एक वर्ग के रूप में व्यावसायिक तर्क त्रुटियों को कवर करने के लिए सबसे अच्छा लगता है।
400 Bad Requestतब उपयोग करता हूं जब डेटा गायब होता है या पढ़ा / पार्स नहीं किया जा सकता है। यानी अनुरोध डेटा स्वयं किसी तरह से खराब है।
400 Bad Request। इस अलगाव का कारण यह है कि भविष्य के सिस्टम, देवता या दस्तावेजों के पाठक विश्व-व्यापी मानक के आपके विचलन से भ्रमित हो सकते हैं।