2011-03-20 10 views
24

यह मुझे अस्पष्ट नहीं है जब आपको HTTP 412 वापस करना चाहिए और नहीं करना चाहिए: पूर्व शर्त विफल, वेब सेवा के लिए त्रुटि? मैं डेटा को सत्यापित करते समय इसका उपयोग करने की सोच रहा हूं। उदाहरण के लिए, यदि कोई ग्राहक POST का XML डेटा और उस डेटा में एक आवश्यक डेटा तत्व गुम है, तो 412 और त्रुटि का विवरण प्रतिसाद दे रहा है।HTTP 412 त्रुटि के साथ प्रतिक्रिया देना उचित है?

करता है कि एक HTTP 412 के साथ जवाब की भावना के साथ संरेखित, या कुछ और इस्तेमाल किया जाना चाहिए (उदाहरण के लिए एक और HTTP त्रुटि कोड या वेब अनुप्रयोग अपवाद)?

उत्तर

7

आपका सबसे अच्छा शर्त अभ्यास सबसे वेब सेवाओं है कि मैं एक 400 code (Bad Request) भेजने का उपयोग किया है में 412. से बचने के लिए किया जाएगा। कई ढांचे में 400 के लिए भी अंतर्निहित समर्थन है और आपके ग्राहक अधिक सामान्य त्रुटि कोड की सराहना करेंगे। अक्सर बार, विशेष रूप से आरईएसटी इंटरफेस के साथ, एक सरल "संदेश" या "त्रुटि" तत्व विवरण के साथ वापस किया जाता है।

+2

ग्राहकों को किसी अज्ञात 4xx कोड को 400 के रूप में किसी भी तरह से इलाज करना चाहिए। –

+1

404 के बारे में क्या? – JoelFan

+0

@ जोएलफ़ान 404 अज्ञात कोड नहीं होगा। उस व्यक्ति को शायद संभाला जाना चाहिए जबकि 400-49 9 कोड स्पष्ट रूप से संभाले नहीं गए हैं, उन्हें सामान्य 400 के रूप में माना जाना चाहिए। – BamaPookie

45

आप RFC 2616 को देखें, तो आप अनुरोध हेडर कि एक अनुरोध के शर्तें लागू करने के लिए इस्तेमाल किया जा सकता का एक नंबर देखेंगे:,

If-Match 
If-Modified-Since 
If-None-Match 
If-Range 
If-Unmodified-Since 

इन हेडर 'पूर्व शर्त' शामिल क्लाइंट सर्वर बताने के लिए अनुमति देता है अगर कुछ शर्तों को पूरा किया जाता है तो केवल अनुरोध को पूरा करने के लिए। उदाहरण के लिए, आप संसाधन की स्थिति को अपडेट करने के लिए PUT अनुरोध का उपयोग करते हैं, लेकिन यदि आप अपने हालिया GET के बाद संसाधन किसी अन्य व्यक्ति द्वारा संशोधित नहीं किया गया है, तो आप केवल PUT को क्रियान्वित करने के लिए चाहते हैं।

प्रतिसाद स्थिति कोड 412 (पूर्वशर्त विफल) आम तौर पर प्रयोग किया जाता है जब इन पूर्व शर्त असफल रहा है।

आपका उदाहरण एक अमान्य अनुरोध की तरह लगता है (अर्थात ग्राहक डेटा है कि क्योंकि लापता मूल्यों का अमान्य है प्रस्तुत किया है)। 400 (खराब अनुरोध) का एक स्टेटस कोड आईएमओ के लिए अधिक उपयुक्त है।

+0

@TERACytE कोई भी मौका आप इसे स्वीकार कर सकते हैं? – joelittlejohn

6

412 उन मामलों के लिए आरक्षित है जहां अनुरोध सशर्त है, और स्थिति पूरी नहीं हुई है।

आपके उपयोग के मामले के लिए, 422 Unprocessable Entity अच्छी तरह मेल खाता है।

+4

यह उल्लेखनीय है कि स्थिति कोड '422' आरएफसी 2616 का हिस्सा नहीं है। यह WebDAV के लिए HTTP 1.1 के विस्तार का हिस्सा है। – joelittlejohn

+1

joelittlejohn: यह एक समस्या क्यों है? स्थिति कोड आरएफसी 2616 में एक विस्तार बिंदु हैं, और यह एक बहुत ही उपयोगी विस्तार है। –

+2

मेरा मतलब यह नहीं था कि यह एक समस्या है, केवल यह उल्लेखनीय है :) – joelittlejohn

संबंधित मुद्दे