गलत इनपुट के लिए राइट HTTP स्टेटस कोड


169

200 (सब कुछ ठीक) नहीं होने पर इनपुट में त्रुटि होने पर इष्टतम HTTP प्रतिक्रिया कोड क्या है?

जैसे, आप कुछ डेटा सर्वर पर जमा करते हैं, और यह प्रतिक्रिया देगा कि आपका डेटा गलत है

का उपयोग कर 500सर्वर समस्या की तरह अधिक दिखता है
का उपयोग करते हुए 200चेतावनी / त्रुटि प्रतिक्रिया पाठ के साथ किया जाता है बुरा (इजाजत दी कैशिंग और सब कुछ ठीक नहीं है)
का उपयोग कर 204और कुछ भी नहीं लौटने, (लेकिन अच्छी तरह से समर्थित?) शायद अच्छा है
का उपयोग कर 404गलत है यदि अनुरोध पथ (स्क्रिप्ट) उपलब्ध है और उचित जगह पर


विवरण के लिए मेरा जवाब देखें stackoverflow.com/a/59527615/4127230
shiva2492

जवाबों:


210

हमें अपनी API बनाते समय भी यही समस्या थी। हम एक HTTP स्थिति कोड के लिए देख रहे थे एक के बराबर InvalidArgumentException। नीचे दिए गए स्रोत लेख को पढ़ने के बाद, हमने 422 Unprocessable Entityबताया कि किन राज्यों का उपयोग कर समाप्त किया गया:

422 (Unprocessable Entity) स्थिति कोड का अर्थ है कि सर्वर अनुरोध इकाई की सामग्री प्रकार को समझता है (इसलिए 415 (असमर्थित मीडिया प्रकार) स्थिति कोड अनुचित है), और अनुरोध इकाई का सिंटैक्स सही है (इस प्रकार 400 (खराब अनुरोध) ) स्थिति कोड अनुचित है) लेकिन निहित निर्देशों को संसाधित करने में असमर्थ था। उदाहरण के लिए, यह त्रुटि स्थिति तब हो सकती है यदि किसी XML अनुरोध निकाय में अच्छी तरह से गठित (यानी, वाक्यविन्यास रूप से सही) हो, लेकिन शब्दार्थ गलत, XML निर्देश।

स्रोत: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm


138

4 (4xx) से शुरू होने वाले कोड क्लाइंट त्रुटियों के लिए होते हैं। शायद 400 (खराब अनुरोध) इस मामले के लिए उपयुक्त हो सकता है? Http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html में परिभाषा कहती है:

"अनुरोध को विकृत सिंटैक्स के कारण सर्वर द्वारा समझा नहीं जा सकता है। ग्राहक बिना संशोधनों के अनुरोध को दोहरा सकता है।"


13
400 Bad Requestबुरा नहीं है, लेकिन आमतौर पर विकृत सिंटैक्स के लिए आरक्षित होना चाहिए। ओपी एक मामले के बारे में अधिक अच्छी तरह से गठित सिंटैक्स लेकिन अमान्य मानों से चिंतित है। प्लस 400 एक काफी आम है "ओह शिट कुछ सही नहीं था" प्रतिक्रिया कोड जिसे आप गलत इनपुट के एक विशेष मामले से अलग करना चाह सकते हैं।
कीगो

4
ध्यान दें कि शब्दों को RFC 7231 में अपडेट किया गया था, और "सर्वर विकृत होने के कारण सर्वर द्वारा अनुरोध को नहीं समझा जा सका" को अपडेट किया गया था कि "क्लाइंट के लिए कथित चीज़ के कारण सर्वर अनुरोध या प्रक्रिया नहीं कर सकता है" त्रुटि (जैसे, विकृत अनुरोध वाक्यविन्यास, अमान्य अनुरोध संदेश फ़्रेमिंग, या भ्रामक अनुरोध रूटिंग) "।
कैलिमो

14

RFC Spec के अलावा आप इसे एक्शन में भी देख सकते हैं। ट्विटर प्रतिक्रियाओं की जाँच करें।

https://developer.twitter.com/en/docs/ads/general/guides/response-codes


19
यदि आप अपने लिंक से उदाहरणों को निकालते हैं तो आप अधिक उत्थान प्राप्त कर सकते हैं।
जारेड थिरस्क

मैंने अपनी पोस्ट stackoverflow.com/a/59527615/4127230
shiva2492

1
मेरे लिए लिंक ( fb-developers.info/tech/fb_dev/faq/general/gen_10.html ) एक यादृच्छिक विज्ञापन देता है। मुझे लगता है कि डोमेन
खराब हो

@ dmitry502 ने स्पूफ किए गए लिंक को हटाने के लिए संपादित उत्तर दिया। आपकी टिप्पणी के लिए धन्यवाद
फ्रांसिस

9

409 Conflict एक स्वीकार्य समाधान हो सकता है।

के अनुसार: https://www.w3.org/Protocols/rfc2616/rfc2616-sec810.html

संसाधन की वर्तमान स्थिति के साथ विरोध के कारण अनुरोध पूरा नहीं किया जा सका। इस कोड को केवल उन स्थितियों में अनुमति दी जाती है जहां यह उम्मीद की जाती है कि उपयोगकर्ता संघर्ष को हल करने में सक्षम हो सकता है और अनुरोध को फिर से शुरू कर सकता है। प्रतिक्रिया शरीर SHOULD में संघर्ष के स्रोत को पहचानने के लिए उपयोगकर्ता के लिए पर्याप्त जानकारी शामिल है। आदर्श रूप से, प्रतिक्रिया इकाई में समस्या को ठीक करने के लिए उपयोगकर्ता या उपयोगकर्ता एजेंट के लिए पर्याप्त जानकारी शामिल होगी; हालाँकि, यह संभव नहीं हो सकता है और इसकी आवश्यकता नहीं है।

डॉक्टर एक उदाहरण के साथ जारी है:

PUT अनुरोध के जवाब में विरोध होने की सबसे अधिक संभावना है। उदाहरण के लिए, यदि संस्करण का उपयोग किया जा रहा था और PUT होने वाली इकाई में एक संसाधन में परिवर्तन शामिल थे, जो कि पहले (थर्ड-पार्टी) अनुरोध द्वारा किए गए लोगों के साथ संघर्ष करता है, तो सर्वर यह संकेत देने के लिए 409 प्रतिक्रिया का उपयोग कर सकता है कि यह अनुरोध को पूरा नहीं कर सकता है। । इस स्थिति में, प्रतिक्रिया इकाई में संभवतः दो प्रकारों के बीच अंतर की एक सूची होगी, जो सामग्री-प्रकार की प्रतिक्रिया द्वारा परिभाषित प्रारूप में होगी।


मेरे मामले में, मैं एक स्ट्रिंग, जो एक एपीआई के माध्यम से एक डेटाबेस के लिए, अद्वितीय होना चाहिए PUT करना चाहते हैं। इसे डेटाबेस में जोड़ने से पहले, मैं जाँच कर रहा हूँ कि यह पहले से डेटाबेस में नहीं है।

अगर ऐसा है, तो मैं लौटूंगा "Error: The string is already in the database", 409

मेरा मानना ​​है कि यह वही है जो ओपी चाहता था: एक त्रुटि कोड जब डेटा सर्वर के मानदंडों को पारित नहीं करता है, तो उसके लिए उपयुक्त है।


2

नीचे के परिदृश्य के अनुसार,

मान लीजिए कि कोई आपके सर्वर से डेटा के लिए एक अनुरोध करता है जो सही प्रारूप में है, लेकिन बस "अच्छा" डेटा नहीं है। उदाहरण के लिए, कल्पना करें कि किसी व्यक्ति ने एक एपीआई एंडपॉइंट के लिए एक स्ट्रिंग मान पोस्ट किया है जो स्ट्रिंग मूल्य की उम्मीद करता है; लेकिन, स्ट्रिंग के मूल्य में डेटा को ब्लैकलिस्ट किया गया था (उदाहरण के लिए "पासवर्ड" को पासवर्ड के रूप में उपयोग करने से रोकना)। तब स्थिति कोड 400 या 422 हो सकता है?

अब तक, मैंने एक "400 बैड रिक्वेस्ट" लौटा दी, जो w3.org के अनुसार है, इसका मतलब है:

विकृत सिंटैक्स के कारण सर्वर द्वारा अनुरोध को समझा नहीं जा सका। ग्राहक बिना संशोधनों के अनुरोध को नहीं दोहराएगा।

यह विवरण परिस्थिति के अनुकूल नहीं है; लेकिन, यदि आप HTTP / 1.1 प्रोटोकॉल में परिभाषित कोर HTTP स्टेटस कोड की सूची से जाते हैं, तो यह शायद आपका सबसे अच्छा दांव है।

हाल ही में, हालांकि, मेरी देव टीम के किसी व्यक्ति ने [मुझे बताया] कि लोकप्रिय एपीआई अपनी त्रुटि रिपोर्टिंग के साथ अधिक बारीक पाने के लिए HTTP एक्सटेंशन का उपयोग करना शुरू कर रहे हैं। विशेष रूप से, कई API, जैसे Twitter और Recurly, WebDAV के लिए HTTP एक्सटेंशन में परिभाषित किए गए स्टेटस कोड "422 Unprocessable Entity" का उपयोग कर रहे हैं। HTTP स्थिति कोड 422 राज्यों:

422 (Unprocessable Entity) स्थिति कोड का अर्थ है कि सर्वर अनुरोध इकाई की सामग्री प्रकार को समझता है (इसलिए 415 (असमर्थित मीडिया प्रकार) स्थिति कोड अनुचित है), और अनुरोध इकाई का सिंटैक्स सही है (इस प्रकार 400 (खराब अनुरोध) ) स्थिति कोड अनुचित है) लेकिन निहित निर्देशों को संसाधित करने में असमर्थ था। उदाहरण के लिए, यह त्रुटि स्थिति तब हो सकती है यदि किसी XML अनुरोध निकाय में अच्छी तरह से गठित (यानी, वाक्यविन्यास रूप से सही) हो, लेकिन शब्दार्थ गलत, XML निर्देश।

ऊपर से हमारे पासवर्ड उदाहरण पर वापस जाने पर, यह 422 स्थिति कोड अधिक उपयुक्त लगता है। सर्वर समझता है कि आप क्या करने की कोशिश कर रहे हैं; और यह उस डेटा को समझता है जिसे आप सबमिट कर रहे हैं; यह बस उस डेटा को संसाधित नहीं होने देगा।


-7

404 - नहीं मिला - यूआरआई के लिए इस्तेमाल किया जा सकता है अनुरोध किया गया अमान्य है या उपयोगकर्ता के रूप में अनुरोध किया गया संसाधन मौजूद नहीं है।


2
ओपी ने पहले ही फैसला सुनाया: " 404 का उपयोग करना गलत है यदि अनुरोधित पथ (स्क्रिप्ट) उपलब्ध है और उचित स्थान पर है "
रेमी लेबेऊ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.