महत्वपूर्ण त्रुटियों के रूप में REST API में चेतावनी


9

मेरे पास एक ऐसा REST API है जिसमें DELETE, POST या PUT जैसे कुछ एंट्रीपॉइंट्स के लिए मेरे पास कुछ सत्यापन नियम हैं जो एक त्रुटि वापस कर सकते हैं।

अब मुझे एक नए प्रकार की त्रुटि की आवश्यकता है जैसे गैर-महत्वपूर्ण त्रुटि, कि यह सामान्य तरीके से विफल होना चाहिए, लेकिन "सुप्रेस चेतावनी" झंडे भेजने पर कार्रवाई के लिए जाना चाहिए। ऐसे उपयोगकर्ता से पूछा जा सकता है: "क्या आप सुनिश्चित हैं कि आप इस स्थिति को बदलना चाहते हैं, आप अभी तक समाप्त नहीं हुए हैं"

प्रश्न : क्या इस प्रकार की त्रुटियों के लिए सबसे अच्छा अभ्यास है?

माध्यमिक प्रश्न :

  • क्या इस तरह के व्यवहार के लिए कोई HTTP शब्दार्थ है जिसे मैं उपयोगकर्ता कर सकता हूं?
  • क्या मैं अभी भी REST विचार का पालन करता हूं (मेरे लिए यह दिखता है कि मैं ऐसा करता हूं) - मैं इसे स्टेटलेस रखता हूं

आप कैसे तय करते हैं कि किसी उपयोगकर्ता को इस तरह की चेतावनी दी जाए? आप एप्लिकेशन स्थिति की जांच करने के लिए एपीआई एंडपॉइंट को कॉल करते हैं और फिर उपयोगकर्ता को ऐसा डायलॉग पेश करते हैं, जिससे उपयोगकर्ता प्रतिक्रिया देने तक यूआई को अवरुद्ध कर सके। फिर आप वास्तविक कॉल करें। आपको इसे REST API के साथ भी मॉडल करना चाहिए: यह जाँचने के लिए एक समापन बिंदु जोड़ें कि क्या यह कुछ कार्यों को करने के लिए बचा है। इस तरह से कोई भी एपीआई उपयोगकर्ता "प्री-फ़्लाइट" चेक बनाने में सक्षम है और यहां तक ​​कि उपयोगकर्ता को निर्णय भी सौंप सकता है। आपका HTTP स्टेटस कोड एप्रोच जैसा है rm /fileकि "चेतावनी" फ़ाइल वैसे भी हटाते समय फ़ाइल को आसानी से पढ़ता है।
-कैच-आखिरकार

यह तब होता है जब व्यवसाय प्रोटोकॉल स्थिति कोड के साथ ओवरलैप किया जाता है। वैसे भी। क्या आपने अपने स्वयं के 'HTTP स्थिति कोड' का उपयोग करने की कोशिश की? अगर ट्विटर कर सकता है, तो आप भी। उदाहरण 6xx के लिए कहते हैं? वैसे भी अब तक मुझे पता है, आप प्रतिक्रिया शरीर में संदेश जोड़ सकते हैं, भले ही वह 4xx हो (आपके मामले में कौन सी सीमा को फिर से शुरू किया जाएगा)।
लाईव

अंत में मैंने 409 CONFLICTचेतावनी प्रतिक्रिया के लिए उपयोग किया । इस तरह, क्लाइंट को निर्देश दिया जाता है कि वह कॉल को एक ही एंडपॉइंट और बॉडी के साथ एक्सट्रा पैरामीटर "फ़ोर्स = 1" के साथ बाध्य कर सकता है
user237329

जवाबों:


4

Http में कोई चेतावनी परिणाम कोड नहीं हैं, आप या तो एक सफलता (200) या एक त्रुटि (400, 500) वापस करते हैं। केवल एक चीज जो मुझे पता है कि आप जो चाहते हैं उसके अनुरूप हो सकता है कोड 401 'अनधिकृत' जैसा कुछ है - जो एक सटीक विफलता है, लेकिन अधिकांश ग्राहकों को क्रेडेंशियल के साथ स्वचालित रूप से पुन: प्रयास करने का कारण बनता है।

REST API के लिए आपको सर्वर को रिक्वेस्ट का स्टेटस बताना होगा और रिजल्ट को कैसे हैंडल करना है - इसके लिए आप PUT नहीं भेज सकते हैं और अगर क्लाइंट ख़त्म नहीं होता है या कोई त्रुटि की उम्मीद करता है, तो सफलता - सर्वर को यह जानना होगा सही परिणाम कोड वापस भेजने के लिए जानकारी।

तो आप अपने अनुरोध के साथ 'दमन चेतावनी' झंडे को भेज सकते हैं, अगर यह सेट नहीं है कि सर्वर 409 त्रुटि कोड (या समान) लौटाएगा, और यदि सेट किया गया है, तो इसके बजाय 200 कोड लौटाएं। स्थिति में परिवर्तन भेजे जाने के बाद उपयोगकर्ता से पूछा जा सकता है कि 'क्या आप इस स्थिति को बदलना चाहते हैं'।

आप सर्वर से अनुरोध कर सकते हैं कि वह पूछ सके कि क्या उपयोगकर्ता पाठ्यक्रम की स्थिति बदल सकता है और उसके बाद एक उपयुक्त अनुरोध के साथ पालन कर सकता है।


मैं किसी भी तरह से यह नहीं कह रहा हूं कि यह करना सही है, लेकिन 3xx कोड को किसी प्रकार के नोटिस या चेतावनी कोड के रूप में देखा जा सकता है जहां ग्राहक आगे बढ़ने का फैसला कर सकता है। उस ने कहा, मैं या तो एक कार्रवाई करना चाहता हूं या मैं नहीं करता हूं, और शायद मैं वापस लौट आए शरीर या हेडर में अतिरिक्त जानकारी के साथ प्रतिक्रिया करता हूं।
आर्किमिडिक्स

0

यदि आप उपयोगकर्ता को आपकी सामान्य त्रुटि से निपटने में अनुमति देना चाहते हैं, तो आप विस्तारित HTTP सर्वर में अतिरिक्त जानकारी के साथ 200 SUCCESS स्थिति वापस करने पर विचार कर सकते हैं। उदाहरण के लिए, आप वापस लौट सकते हैं

X-APP-STATUS: 422 Unprocessable entity
X-APP-SOURCE: Invalid ID 'fo0'

यह आपके क्लाइंट-साइड कोड को या तो उपयोगकर्ता को चेतावनी देने या अपने दम पर सुधारात्मक कार्रवाई करने के लिए आवश्यक जानकारी देगा।


2
मुझे ऐसी प्रतिक्रियाएँ कभी पसंद नहीं
आईं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.