एक व्यक्ति ने अपने आत्मा जानवर को चुना है या नहीं, यह पहचानने के लिए एक एपीआई की कल्पना करें। उनके पास केवल शून्य या एक आत्मा जानवर हो सकते हैं।
वर्तमान में:
/person/{id}/selectedSpiritAnimal
जब उन्होंने एक पशु रिटर्न http 200 चुना है और {selectedAnimal:mole}
लेकिन जब उनका कोई चयन नहीं होता है तो यह http 404 लौटता है।
यह मेरी आत्मा के जानवर को दुखी करता है क्योंकि हम एक वैध डोमेन चिंता का प्रतिनिधित्व कर रहे हैं - अभी तक एक एचटीटीपी त्रुटि के रूप में एक आत्मा जानवर का चयन नहीं किया गया है।
इसके अलावा, एक व्यवसाय के रूप में - erm Sprit-Animal-Hampers-R-us - हम यह जानना चाहते हैं कि जब किसी का कोई चयन नहीं होता है तो हम उन्हें संकेत दे सकते हैं।
यहां बेहतर प्रतिक्रिया क्या है:
HTTP 200 और {selectedAnimal:null}
या इससे भी अधिक स्पष्ट
HTTP 200 और {selectedAnimal:null, spiritAnimalSelected: false}
या 404 लौटाना बेहतर है? बहुत पसंद है this image has not yet been uploaded
जब एक छवि ऑनलाइन देखने के एक 404 होगा। एक 404 this person has not selected a spirit animal
हो सकता है
इस प्रश्न को एक डुप्लिकेट के रूप में प्रस्तावित किया गया है, लेकिन यह प्रश्न एक अन्यथा मान्य URL को संबोधित करता है जब आवेदन को कॉन्फ़िगर किया गया है जो URL का प्रतिनिधित्व करने वाले परिवर्तन की अनुमति नहीं देता है।
जबकि यहाँ मैं देख रहा हूँ कि कैसे एक संसाधन का प्रतिनिधित्व करता है जहाँ संसाधन की अनुपस्थिति सार्थक है। यानी यह क्लाइंट के लिए URL का अनुरोध करने के लिए मान्य है और प्रतिक्रिया है कि आपने सफलतापूर्वक संसाधन का अनुरोध किया है जो किसी चीज की अनुपस्थिति का प्रतिनिधित्व करता है।
इसलिए यह 'व्यावसायिक तर्क' नहीं है, बल्कि ऐसी परिस्थिति है जहाँ किसी चीज़ की अनुपस्थिति का अर्थ है (यह हो सकता है कि मेरे कई सहयोगी तर्क दे रहे हैं कि 404 अभी भी सही है) लेकिन मुझे यकीन नहीं है कि इसे कैसे मैप किया जाए कल्पना।
जवाब चुनना बहुत मुश्किल है। मैंने यहां बातचीत और काम पर चल रहे एक से अधिक बार अपना मन बदल दिया है।
यहाँ मेरे लिए जो चीज़ बसती है, वह यह है कि युक्ति कहती है कि 4xx तब है जब ग्राहक मिट गया है । इस उदाहरण में ग्राहक से कहा गया है कि वह चयनित से एक प्रतिक्रिया की अपेक्षा करे।
मेरे सहयोगियों के बीच आम सहमति है कि यह खराब एपीआई डिजाइन का एक लक्षण है
यह शायद बेहतर होगा कि हम केवल / व्यक्ति / {आईडी} का अनुरोध करें और यह व्यक्ति के लिए लिंक संबंधों का एक सेट लौटाता है ... फिर यदि आपको / selectSpiritAnimal लिंक नहीं दिया गया है (जब किसी व्यक्ति का कोई चयन नहीं है) लेकिन आप वैसे भी बुलाओ तो एक 404 समझ में आता है। या जब आप आंशिक प्रतिक्रियाओं को लागू करते हैं और / व्यक्ति / {आईडी} एक अधिक पूर्ण दस्तावेज़ लौटाते हैं जब तक कि ग्राहक डेटा के सबसेट का अनुरोध नहीं करता है