2008-11-12 8 views
11

हमारे पास एक आरईएसटी एपीआई है जो ग्राहक नियमित रूप से पोस्ट और डेटा को पुट करते हैं। जब वे ऐसा करते हैं, तो कभी-कभी वे डेटा पोस्ट करते हैं जिसके परिणामस्वरूप हमारे सिस्टम पर कोई बदलाव नहीं होता है। POSTs और PUTs अच्छी तरह से गठित होते हैं, लेकिन वे जो डेटा भेज रहे हैं वह हमारे डेटाबेस में डेटा के समान है। जब ऐसा होता है, तो मुझे पता चला है कि हम 400 HTTP स्थिति लौट रहे हैं। दुर्भाग्यवश, इसका मतलब है "खराब अनुरोध" जैसा कि "विकृत वाक्यविन्यास के कारण सर्वर द्वारा अनुरोध को समझा नहीं जा सका"।REST: एक पोस्ट के लिए सही HTTP प्रतिक्रिया कोड जिसे अनदेखा किया गया है

स्पष्ट रूप से यह मामला नहीं है, लेकिन मुझे बताया गया है कि हम इसका उपयोग करने जा रहे हैं क्योंकि कोई अन्य उचित स्थिति कोड नहीं है। जिन विकल्पों पर हमने विचार किया है:

  • 304 संशोधित नहीं। यह अफसोस की बात है, केवल अनुरोधों के लिए है।
  • 204 कोई सामग्री नहीं। नज़दीक लगता है, लेकिन एक इकाई-शरीर को मना करता है।

अन्य विकल्प समान रूप से खराब लगते हैं। हम 200 OK के साथ जा सकते हैं और हमारे पास वापस आने वाले XML दस्तावेज़ में प्रासंगिक जानकारी है, लेकिन यह बहुत "रीस्टिश" प्रतीत नहीं होता है। आरईएसटी दुनिया आम तौर पर इसे कैसे संभालती है?

(फिक्स्ड संशोधित नहीं प्रतिक्रिया कोड। धन्यवाद Mkoeller)

+0

HTTP स्थिति 302 का नाम "मिला" है। – mkoeller

उत्तर

17

मुझे लगता है कि उस मामले में 200 ओके वापस करने के लिए यह बिल्कुल ठीक है, डेटा सही तरीके से संसाधित किया गया था और सर्वर ने जो किया था उसे किया। चूंकि सर्वर ने सही ढंग से डेटा संसाधित किया है, इसलिए इसे ठीक स्थिति कोड वापस करना चाहिए। तथ्य यह है कि इसे आंतरिक रूप से अनदेखा किया गया है या अप्रासंगिक होना चाहिए।

ग्राहकों को डेटा से क्या सर्वर नहीं बताया जाना चाहिए, उन्हें बताया जाना चाहिए कि अनुरोध (क्या ठीक है, त्रुटि हुई, और इसी तरह) के साथ क्या हुआ।

और अगर, कुछ अजीब कारण के लिए (मैं एक वैध एक है, btw सोच भी नहीं सकते), यह ग्राहकों के लिए ब्याज की है, तो आप प्रतिक्रिया उन्हें इतना बताने के लिए की है।

1

ग्राहक से सर्वर की स्थिति देखने के लिए एक ही है अगर अनुरोध सामग्री या सही सर्वर पर ही था, है ना? चूंकि सर्वर बाद में जो सामग्री भेजी गई थी, उसके बाद सर्वर को किसी भी प्रकार की त्रुटि स्थिति का जवाब क्यों देना चाहिए? दूसरी तरफ ग्राहक को परेशान क्यों होना चाहिए यदि अनुरोध सामग्री सर्वर के लिए पहले से ही ज्ञात है? इसे सफलतापूर्वक सर्वर में स्थानांतरित कर दिया गया था ताकि काम का बड़ा हिस्सा हो। इस स्थिति के लिए एक अलग प्रतिक्रिया कोड होने पर ग्राहक को प्रतिक्रिया करने की उम्मीद कैसे की जाती है?

निष्कर्ष: मौजूदा सामग्री के बराबर अनुरोध सामग्री की आपकी स्थिति कोई विशेष मामला नहीं है। आपको एक ही प्रतिक्रिया स्थिति कोड के साथ जवाब देना चाहिए। यह 200, 302 या 303 हो सकता है।

2

यदि ग्राहक PUT से पहले सर्वर पर सामग्री के लिए इकाई टैग को जानने में सक्षम हैं, तो यदि आप वर्णन करते हैं तो सटीक स्थिति के लिए if-match शीर्षलेख और 412 प्रीकंडीशन विफल प्रतिक्रिया का उपयोग कर रहे हैं।

+0

आपका मतलब है 'अगर-कोई नहीं-मैच' –

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