2010-07-23 11 views
5

मैं एक आरईएसटी आधारित वेब सेवा लिख ​​रहा हूं, और मैं त्रुटि स्थितियों को संभालने का सबसे अच्छा तरीका जानने की कोशिश कर रहा हूं।एक आरईएसटी सेवा में कॉल के दौरान त्रुटि संदेशों को व्यक्त करने का सही तरीका?

वर्तमान में सेवा में इस तरह के गलत अनुरोध के रूप में HTTP त्रुटियाँ, लौटा रहा है, लेकिन मैं अतिरिक्त जानकारी वेब सेवा एक विचार वे गलत क्या कर रहे हैं का उपयोग कर डेवलपर्स देने के लिए कैसे लौट सकते हैं?

उदाहरण के लिए: एक अशक्त उपयोगकर्ता नाम के साथ एक उपयोगकर्ता बनाने गलत अनुरोध की एक त्रुटि देता है। मैं कैसे जोड़ सकता हूं कि त्रुटि एक शून्य उपयोगकर्ता नाम पैरामीटर के कारण हुई थी?

उत्तर

2

यह HTTP कल्पना है कि ज्यादातर त्रुटि कोड कुछ बुनियादी पाठ यही कारण है कि त्रुटि दी जा रही है की एक स्पष्टीकरण देता लौटना चाहिए में कहा गया है। इस उद्देश्य के लिए मूल जावा सर्वलेट स्पेक HttpServletResponse.sendError(int Code, String message) को परिभाषित करता है।

4

HTTP spec के अनुसार, पाठ कि तीन अंकों प्रतिक्रिया कोड के बाद आता है, "कारण-वाक्यांश", केवल एक तार्किक बराबर साथ प्रतिस्थापित किया जा सकता है। तो आप 400 null user के साथ प्रतिक्रिया नहीं दे सकते हैं और कुछ भी उपयोगी होने की उम्मीद करते हैं। दरअसल, ग्राहक को कारण-परीक्षण की जांच या प्रदर्शन करने की आवश्यकता नहीं है।

सामान्य में, HTTP प्रतिक्रिया इकाई (आमतौर पर पेज है कि प्रतिक्रिया के साथ जुडा हुआ) जानकारी ग्राहक के लिए उपयोगी शामिल करना चाहिए उन्हें आगे मार्गदर्शन करने, तब भी जब प्रतिक्रिया एक त्रुटि है। वेब पर, ऐसी अधिकांश errorsHTML हैं, और मशीन पठनीय जानकारी से रहित हैं, लेकिन सबसे ब्राउज़रों उपयोगकर्ता के लिए त्रुटि दिखाते हैं (और इसलिए की त्रुटि पृष्ठ काफ़ी अच्छा है!)।

  1. वैसे भी एक मानव पठनीय संदेश दर्रा:

    तो एक मुख्य रूप से मशीन पठनीय संसाधन के लिए आपके पास दो विकल्प हैं। एचटीएमएल प्रतिक्रिया के साथ 400 Bad Request लौटें, जो ग्राहक उपयोगकर्ता को दिखाने का विकल्प चुन सकता है। यह मृत आसान है लेकिन यह थोड़ा एक अनियंत्रित अपवाद फेंकने की तरह है, यह ग्राहक, या वास्तव में अंत उपयोगकर्ता के लिए सभी कड़ी मेहनत से गुजरता है।

  2. ग्राहकों को पुनर्प्राप्त करने की अनुमति दें। एक मशीन पठनीय प्रतिक्रिया के साथ 400 Bad Request लौटें जो आपके एपीआई का हिस्सा है, इसलिए ग्राहक ज्ञात त्रुटि स्थितियों से पुनर्प्राप्त कर सकते हैं। यह कठिन है एक जाँच अपवाद, यह एपीआई का हिस्सा बन जाता फेंकने की तरह है, और यह ग्राहकों को शान से ठीक करने के लिए वे चाहते हैं अनुमति देता है।

तुम भी सर्वर समर्थन machie पठनीय त्रुटि वसूली दस्तावेज़ के लिए एक मीडिया प्रकार परिभाषित करते हुए दोनों परिदृश्यों बना सकते हैं, और ग्राहकों को उन्हें "स्वीकार" करने की अनुमति: Accept: application/atom+xml, application/my.proprietary.errors+json

ग्राहकों कि अनिवार्य क्षेत्र भूल त्रुटि मीडिया प्रकार में Accept चुनकर मशीन पठनीय त्रुटियों या मानव पठनीय त्रुटियों को प्राप्त करने का विकल्प चुन सकते हैं।

+0

+1, अभी कुछ आरईएसटी काम कर रहा है, यह पोस्ट वास्तव में एक समय बचाने वाला है, बहुत दोस्त धन्यवाद! – Anders

+0

आपका स्वागत है। लेकिन मैंने अभी तक जो भी प्रचार किया है उसका अभ्यास करना अभी बाकी है। मैंने केवल पाठ/सादा मीडिया प्रकार पर स्टैक निशान पारित किए हैं। यह गलत नहीं है, लेकिन यह बहुत मानव पठनीय नहीं है। – mogsie

+0

लेकिन विशिष्ट कारण-वाक्यांश सुनिश्चित कर सकते हैं कि लेखन परीक्षण आसान हो;) – fumanchu

0
String desc = "my Description"; 
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(desc).type("text/plain").build()); 
+0

यह कौन सी भाषा है? –

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