2012-05-24 19 views
20

तो मैं एक रेस्ट एपीआईHTTP स्थिति कोड 400 बनाम 412

एक पोस्ट एक संसाधन है और एक आवश्यक फ़ील्ड नहीं है कि मैं क्या लौटना चाहिए बनाने के लिए किया जाता है विकासशील रहा हूँ?

400 - गलत अनुरोध

या

412 - पूर्वशर्त

और क्यों विफल?

उत्तर

28

उपयोग 400 अनुरोध करता है, तो मापदंडों गलत हैं। 412 का प्रयोग करें यदि If-* अनुरोध में से एक हेडरIf-Match, If-Modified-Since, आदि जैसे गलत हैं।

क्यों? यही आरएफसी कहता है। उदाहरण के लिए देखें If-Match विनिर्देश के इस उद्धरण:

तो इकाई टैग मैच में से कोई भी, या यदि "*" दिया जाता है और कोई मौजूदा इकाई मौजूद है, सर्वर का अनुरोध विधि को नहीं चाहिए, और उसे एक 412 वापसी (पूर्व शर्त विफल) प्रतिक्रिया। यह व्यवहार सबसे अधिक उपयोगी जब ग्राहक एक संसाधन के बाद से ग्राहक पिछले यह लिया गया बदल गया है कि संशोधित करने से इस तरह डाल के रूप में एक अद्यतन करने विधि को रोकने के लिए, चाहता है।

+1

यह भी बताता है कि अनुरोध 400 के लिए विकृत वाक्यविन्यास के कारण पूरा नहीं हो सका। – Rob

+1

इस पृष्ठ ने वास्तव में मेरी मदद की - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- संदर्भ के लिए 'PUT' अनुरोधों का उपयोग करना मेरे लिए यह समझना आसान बनाता है कि यह क्या है, क्योंकि कुछ स्थिति कोडों का दुरुपयोग करना हमेशा आसान होता है। – Charlie

12

412 का उपयोग तब किया जाता है जब आपका सर्वर क्लाइंट द्वारा निर्दिष्ट शर्त को पूरा नहीं करता है।

आपके मामले में आप एक 400 का उपयोग करना चाहिए यह सिर्फ एक बुरा अनुरोध है।

पूर्व शर्त हेडर पर कुछ explaination के लिए इस link देखें।

एटैग हेडर आमतौर पर एक स्ट्रिंग है जो HTTP हेडर में हमारे संसाधन का प्रतिनिधित्व करता है। तुम एक हैं-मैच के साथ एक संसाधन के लिए पूछना एक preconditional HTTP शीर्ष लेख है। यह 412 भेज देगा यदि यह आपके द्वारा भेजे गए कोड से मेल नहीं खाता है।

यदि कोई नहीं-मैच सर्वर को पूरी प्रतिक्रिया को संसाधित करने के लिए कहता है तो Etag क्लाइंट द्वारा भेजे गए एक से अलग है।

+0

डाउनवोट क्यों? उत्तर के साथ क्या गलत है? – nunespascal

+4

सोचें कि किसी के पास बुरा दिन है। बस इसे अनदेखा करें और सिस्टम को अपना काम करने दें :) – BalusC

+0

इसे संतुलित करने के लिए एक उपरोक्त है। –

3

आप स्टेटस कोड 422 का उपयोग कर सकते हैं। यदि आप नहीं चाहते हैं, तो 400 ठीक है।

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