जब पैरेंट रिसोर्स नहीं पाया जाता है तो POST के लिए एक उचित प्रतिक्रिया स्थिति कोड क्या है?


10

मैं निम्नलिखित समापन बिंदु है:

a/{id}/b

और इसे bभेजने के POSTअनुरोध के साथ बनाना चाहते हैं । यदि aदिया गया {id}नहीं मिला है तो क्या मुझे इसके साथ प्रतिक्रिया करनी चाहिए 404 NOT_FOUNDया शायद साथ चाहिए 409 CONFLICT?

यह सादे को संभालने के लिए है a/{id}, चाल यह है कि यहां एक सबसोर्स का उपयोग किया जाता है।


जवाबों:


15

404 NOT FOUNDउचित प्रतिक्रिया लगती है, क्योंकि इस आईडी वाला संसाधन मौजूद नहीं है। यह समझना बहुत स्पष्ट है और आप उसी प्रतिक्रिया की उम्मीद कर रहे हैं a/{id}जिसे कहा जाता है।

409 CONFLICTमुझे बेहतर विकल्प नहीं लगता है, क्योंकि आपके उदाहरण में आप एक 409 वापस करेंगे जब मूल संसाधन नहीं मिला :)।

लेकिन याद रखें कि सबसे महत्वपूर्ण चीज आपके एपीआई में सुसंगत है


मैं सहमत हूँ। यदि आप उस फ़ोल्डर में लिखने की कोशिश कर रहे थे जो मौजूद नहीं था, तो क्या यह एक संघर्ष या एक लापता फ़ोल्डर त्रुटि है? यह मुझे इस तरह से अधिक सहज लगता है।
नील

एक "फ़ोल्डर" का अर्थ है एक पथ जो मौजूद नहीं है?
धेरिक

मेरा मतलब एक फ़ोल्डर है, जैसे फ़ाइल सिस्टम।
नील

क्या आप परिदृश्य का विस्तार कर सकते हैं? क्योंकि यह निर्भर करता है। यदि फ़ोल्डर सर्वर के लिए अपेक्षित था और (जो भी कारण के लिए) नहीं हैं, तो मुझे लगता है कि यह सर्वर त्रुटि है (5xx) क्लाइंट त्रुटि (4xx) नहीं। यदि यह फ़ोल्डर मान क्लाइंट द्वारा संसाधन (के रूप में id) के लिए पारित किया गया था , तो 404 है। लेकिन अगर फ़ोल्डर को शरीर में पारित किया गया था तो यह कुछ और हो सकता है (412, 422 ... कुछ प्रतिनिधित्व करने के लिए "सत्यापन विफल: फ़ोल्डर करता है अस्तित्व में नहीं है")। यह पूछने और चर्चा करने के लिए एक अच्छा सवाल है।
Dherik

यदि आप पथ /nonexistent/help.html के साथ फ़ाइल के लिए सर्वर से पूछते हैं, और फ़ोल्डर / कोई भी मौजूद नहीं है, तो इसके लिए केवल एक स्पष्ट प्रतिक्रिया है। 404 फ़ाइल नहीं मिली! एक /home/help.html भी मौजूद हो सकता है, और प्रतिक्रिया अलग नहीं होगी। यह स्पष्ट रूप से REST अनुप्रयोग है, लेकिन मुझे कोई कारण नहीं दिखता कि तर्क क्यों बदलेगा। माता-पिता का अस्तित्व पहले होना चाहिए।
नील

4

@ धरिक के जवाब के अलावा।

यूआरआई पहचानकर्ता होते हैं , इसलिए हमें यह ध्यान रखना होगा कि ( /a/{id}/bएक पहचानकर्ता है)। यूआरआई WWW के लिए कोई मतलब नहीं है, और इसलिए HTTP ग्राहक के लिए है।

404 सही उत्तर है । संक्षेप में, सर्वर जवाब दे रहा है

मुझे ऐसी आईडी से कोई संसाधन नहीं मिला। संसाधन 1 नहीं मिला

क्या लापता संसाधन माता - पिता या बच्चे से कोई फर्क नहीं पड़ता।

हम, डेवलपर्स, URI में पदानुक्रम और पथ देखते हैं , लेकिन HTTP क्लाइंट नहीं है। दूसरे शब्दों में, HTTP का अर्थ केवल HTTP क्लाइंट द्वारा व्याख्या किया जाना है, लेकिन मनुष्यों (देवों, अंत उपयोगकर्ताओं, आदि) द्वारा नहीं।

संदेह के मामले में, यह न पूछें कि आपके (मानव) के लिए क्या कोड मायने रखता है। पूछो, क्या कोड HTTP क्लाइंट के लिए समझ में आता है। आप HTTP क्लाइंट को कैसे व्यवहार करना चाहते हैं?

क्यों? क्योंकि कुछ स्टेटस कोड के कारण इन क्लाइंट्स को कुछ ऑपरेशन करने पड़ते हैं। उदाहरण के लिए, 302 । यह कोड आमतौर पर वेब ब्राउजर्स को रिस्पॉन्स हेडर में सूचित किसी विशिष्ट स्थान (URI) पर पुनर्निर्देशित करता है।

यह आपका मामला नहीं हो सकता है, लेकिन जागरूक होना महत्वपूर्ण है। अंततः, HTTP स्थिति कोड HTTP क्लाइंट को संबोधित किए जाते हैं। हमारे अनुप्रयोगों के लिए नहीं। व्यक्तियों को नहीं।


1: 409 को नेविगेशन त्रुटि के रूप में शायद ही कभी लागू किया जाता है। इसमें आमतौर पर रिमोट ऑपरेशन (डिलीट, अपडेट, नया आदि) का निष्पादन शामिल है। लेकिन यूआरआई मौजूद होना चाहिए। अन्यथा, 404 प्रबल होगा

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