web services - आरईएसटी एपीआई त्रुटि अच्छी प्रथाओं को वापस लाती है




web-services http (8)

तो सबसे पहले मैं 200 ओके और एक विशिष्ट एक्सएमएल पेलोड के साथ अपनी एप्लिकेशन त्रुटि वापस करने का लुत्फ उठा रहा था (यानी हमें और अधिक भुगतान करें और आपको आवश्यक भंडारण मिलेगा!) लेकिन मैंने इसके बारे में सोचना बंद कर दिया और यह साबुन (/ डरावनी में झुकाव)।

मैं एक 200 वापस नहीं लौटाऊंगा जब तक अनुरोध में वास्तव में कुछ भी गलत नहीं था। RFC2616 से 200 का मतलब है "अनुरोध सफल हुआ है।"

यदि ग्राहक का संग्रहण कोटा पार हो गया है (किसी भी कारण से), तो मैं 403 (निषिद्ध) वापस कर दूंगा:

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

यह क्लाइंट को बताता है कि अनुरोध ठीक था, लेकिन यह विफल रहा (कुछ ऐसा नहीं करता है)। यह आपको प्रतिक्रिया शरीर में समस्या (और इसके समाधान) की व्याख्या करने का मौका भी देता है।

आपके मन में अन्य विशिष्ट त्रुटि स्थितियां क्या हैं?

जब मैं एक आरईएसटी एपीआई से त्रुटियों को वापस करने की बात आती है तो मैं अच्छे प्रथाओं पर मार्गदर्शन की तलाश में हूं। मैं एक नई एपीआई पर काम कर रहा हूं इसलिए मैं इसे अभी कोई दिशा ले सकता हूं। इस समय मेरा सामग्री प्रकार एक्सएमएल है, लेकिन मैं भविष्य में जेएसओएन का समर्थन करने की योजना बना रहा हूं।

अब मैं कुछ त्रुटि मामलों को जोड़ रहा हूं, उदाहरण के लिए क्लाइंट एक नया संसाधन जोड़ने का प्रयास करता है लेकिन उसने अपने स्टोरेज कोटा को पार कर लिया है। मैं पहले से कुछ त्रुटि मामलों को HTTP स्टेटस कोड (प्रमाणीकरण के लिए 401, प्राधिकरण के लिए 403 और सादे खराब अनुरोध यूआरआई के लिए 404) के साथ कुछ त्रुटि मामलों को संभालने में सक्षम हूं। मैंने धन्य HTTP त्रुटि कोडों को देखा लेकिन 400-417 रेंज में से कोई भी एप्लिकेशन विशिष्ट त्रुटियों की रिपोर्ट करने का अधिकार नहीं लगता है। तो सबसे पहले मैं 200 ओके और एक विशिष्ट एक्सएमएल पेलोड के साथ अपनी एप्लिकेशन त्रुटि वापस करने का लुत्फ उठा रहा था (यानी हमें और अधिक भुगतान करें और आपको आवश्यक भंडारण मिलेगा!) लेकिन मैंने इसके बारे में सोचना बंद कर दिया और यह साबुन (/ डरावनी में झुकाव)। इसके अलावा ऐसा लगता है कि मैं अलग-अलग मामलों में त्रुटि प्रतिक्रियाओं को विभाजित कर रहा हूं, क्योंकि कुछ http स्थिति कोड संचालित हैं और अन्य सामग्री संचालित हैं।

तो उद्योग की सिफारिशें क्या हैं? अच्छी प्रथाओं (कृपया बताएं क्यों!) और साथ ही, क्लाइंट पीओवी से, आरईएसटी एपीआई में किस तरह की त्रुटि को संभालने से ग्राहक कोड के लिए जीवन आसान हो जाता है?



कृपया प्रोटोकॉल के अर्थशास्त्र से चिपके रहें। सफल प्रतिक्रियाओं के लिए 2xx और त्रुटि प्रतिक्रियाओं के लिए 4xx, 5xx का उपयोग करें - चाहे यह आपके व्यावसायिक अपवाद हों या अन्य। किसी भी प्रतिक्रिया के लिए 2xx का उपयोग प्रोटोकॉल में इच्छित उपयोग केस था, उनके पास पहले स्थान पर अन्य स्टेटस कोड नहीं होंगे।


जैसा कि अन्य ने इंगित किया है, एक त्रुटि कोड में प्रतिक्रिया इकाई होने के लिए पूरी तरह स्वीकार्य है।

याद रखें कि 5xx त्रुटियां सर्वर-साइड हैं, उर्फ ​​क्लाइंट अनुरोध पास करने के अनुरोध में कुछ भी नहीं बदल सकता है। यदि ग्राहक का कोटा पार हो गया है, तो यह निश्चित रूप से सर्वर त्रुटि नहीं है, इसलिए 5xx से बचा जाना चाहिए।


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

एक HTTP 200 लिफाफा में त्रुटि प्रतिक्रिया भेजना भ्रामक है, और क्लाइंट (एपीआई उपभोक्ता) को संदेश को पार्स करने के लिए मजबूर करता है, अधिकतर गैर-मानक, या मालिकाना तरीके से। यह भी कुशल नहीं है - आप "वास्तविक" प्रतिक्रिया स्थिति को समझने के लिए हर बार HTTP पेलोड को पार्स करने के लिए मजबूर करेंगे। यह प्रसंस्करण बढ़ता है, विलंबता जोड़ता है, और ग्राहक को गलतियों के लिए पर्यावरण बनाता है।


मुख्य विकल्प यह है कि आप अपने आरईएसटी एपीआई के हिस्से के रूप में HTTP स्टेटस कोड का इलाज करना चाहते हैं या नहीं।

दोनों तरीके ठीक काम करते हैं। मैं मानता हूं कि, सख्ती से बोलते हुए, आरईएसटी के विचारों में से एक यह है कि आपको अपने एपीआई के हिस्से के रूप में HTTP स्टेटस कोड का उपयोग करना चाहिए (सफल ऑपरेशन के लिए 200 या 201 वापसी करें और विभिन्न त्रुटि मामलों के आधार पर 4xx या 5xx)। हालांकि , कोई आरईएसटी पुलिस नहीं है। आप जो चाहते है वो कर सकते हैं। मैंने बहुत अधिक गैर-आरईएसटी एपीआई को "रीस्टफुल" कहा है।

इस बिंदु पर (अगस्त, 2015) मैं अनुशंसा करता हूं कि आप अपने एपीआई के हिस्से के रूप में HTTP स्टेटस कोड का उपयोग करें। अतीत में ढांचे का उपयोग करते समय रिटर्न कोड देखना अब बहुत आसान है। विशेष रूप से, गैर-200 रिटर्न केस और अतीत में गैर-200 प्रतिक्रियाओं के शरीर को देखना अब आसान है।

HTTP स्थिति कोड आपके एपीआई का हिस्सा है

  1. आपको अपनी त्रुटि स्थितियों के अनुरूप 4xx कोड सावधानीपूर्वक चुनना होगा। आप एक विश्राम, एक्सएमएल, या सादे टेक्स्ट संदेश को पेलोड के रूप में शामिल कर सकते हैं जिसमें उप-कोड और वर्णनात्मक टिप्पणी शामिल है।

  2. ग्राहकों को एक सॉफ्टवेयर ढांचे का उपयोग करने की आवश्यकता होगी जो उन्हें HTTP-स्तर स्थिति कोड प्राप्त करने में सक्षम बनाता है। आम तौर पर हमेशा सक्षम नहीं, हमेशा सक्षम नहीं होते हैं।

  3. ग्राहकों को HTTP स्थिति कोडों के बीच अंतर करना होगा जो संचार त्रुटि और आपके स्वयं के स्टेटस कोड इंगित करते हैं जो एप्लिकेशन-स्तरीय समस्या इंगित करते हैं।

HTTP स्थिति कोड आपके एपीआई का हिस्सा नहीं है

  1. यदि आपके ऐप को अनुरोध प्राप्त हुआ तो HTTP स्टेटस कोड हमेशा 200 होगा और फिर जवाब दिया गया (सफलता और त्रुटि दोनों मामलों)

  2. आपके सभी प्रतिक्रियाओं में "लिफाफा" या "हेडर" जानकारी शामिल होनी चाहिए। आमतौर पर कुछ ऐसा है:

    envelope_ver: 1.0
    status:  # use any codes you like. Reserve a code for success. 
    msg: "ok" # A human string that reflects the code. Useful for debugging.
    data: ...  # The data of the response, if any.
  3. यह विधि ग्राहकों के लिए आसान हो सकती है क्योंकि प्रतिक्रिया की स्थिति हमेशा एक ही स्थान पर होती है (कोई उप-कोड आवश्यक नहीं है), कोड पर कोई सीमा नहीं, HTTP-स्तर स्थिति-कोड लाने की आवश्यकता नहीं है।

यहां एक समान विचार के साथ एक पोस्ट है: http://yuiblog.com/blog/2008/10/15/datatable-260-part-one/

मुख्य मुद्दे:

  1. संस्करण संख्या शामिल करना सुनिश्चित करें ताकि बाद में यदि आप आवश्यक हो तो एपीआई के अर्थशास्त्र को बदल सकते हैं।

  2. दस्तावेज़ ...


मौजूदा 'सर्वोत्तम प्रथाओं' पर आपके एपीआई को मॉडलिंग करने का तरीका हो सकता है। उदाहरण के लिए, यहां बताया गया है कि ट्विटर कैसे त्रुटि कोड प्रबंधित करता है https://developer.twitter.com/en/docs/basics/response-codes


यदि क्लाइंट कोटा पार हो गया है तो यह एक सर्वर त्रुटि है, इस उदाहरण में 5xx से बचें।






rest