2012-12-20 16 views
54

मेरे पास एक आरईएसटी सेवा है जो आईफोन और एंड्रॉइड क्लाइंट के संपर्क में है। वर्तमान में मैं HTTP कोड 200, 400, 401, 403, 404, 40 9, 500 इत्यादि का पालन करता हूंHTTP शीर्षलेख या प्रतिक्रिया शरीर में शेष त्रुटि संदेश?

मेरा प्रश्न यह है कि त्रुटि का कारण/विवरण/कारण डालने के लिए अनुशंसित जगह कहां है? क्या आरईएसटी एपीआई के लिए हेडर में हमेशा कस्टम कारण होने के लिए यह अधिक समझ में आता है?

< HTTP/1.1 400 Bad Request - Missing Required Parameters. 
< Date: Thu, 20 Dec 2012 01:09:06 GMT 
< Server: Apache/2.2.22 (Ubuntu) 
< Connection: close 
< Transfer-Encoding: chunked 

या जेएसओएन के माध्यम से प्रतिक्रिया शरीर में यह बेहतर है?

< HTTP/1.1 400 Bad Request 
< Date: Thu, 20 Dec 2012 01:09:06 GMT 
< Server: Apache/2.2.22 (Ubuntu) 
< Connection: close 
< Transfer-Encoding: chunked 
< Content-Type: application/json 
{ "error" : "Missing Required Parameters" } 
+1

आजकल, कस्टम हेडर जोड़ने के लिए एक सामान्य प्रथा है, जैसे 'एक्स-HTTP-त्रुटि-विवरण: अनुपलब्ध आवश्यक पैरामीटर'। – andreszs

उत्तर

66

400.x त्रुटि कोड के लिए HTTP विनिर्देशन से हवाला देते हुए:

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

HTTP प्रतिक्रिया के शरीर में एक त्रुटि के रूप में त्रुटि संदेश को शामिल करना सबसे अच्छा अभ्यास है - चाहे वह JSON, सादा पाठ, स्वरूपित HTML हो, या जो भी अन्य प्रारूप आप उपयोग करना चाहते हैं।

+2

यह प्रश्न का उत्तर नहीं देता है: क्या प्रतिक्रिया संदेश हेडर या प्रतिक्रिया निकाय में त्रुटि संदेश डालना बेहतर है? –

18

शरीर में त्रुटि विवरण होना बेहतर है। इसके अलावा, कई (अधिकांश/लगभग सभी, उदाहरण के लिए डब्लूएसजीआई) सर्वर और क्लाइंट त्रुटि कोड के नाम को बदलने का समर्थन नहीं करते हैं - उन्हें निश्चित जोड़े के रूप में व्यवहार करें (इसलिए उदाहरण 400 हमेशा "खराब अनुरोध" है और "खराब अनुरोध नहीं - आप उपयोगकर्ता आईडी निर्दिष्ट करने के लिए भूल गए ")। भले ही वे तोड़ नहीं जाएंगे, फिर भी वे विशिष्ट त्रुटि कोड के लिए आपके विशेष नाम की परवाह नहीं करेंगे।

0

मैं हमेशा दोनों करता हूं। मैं आम तौर पर स्थिति संदेश को उस चीज़ पर सेट करता हूं जो फ्रंट एंड उपयोगकर्ता के अनुकूल तरीके से प्रदर्शित हो सकता है जैसे कि "40 9 - नया उपयोगकर्ता नहीं जोड़ सका, वे पहले से मौजूद हैं।"

तब मैं शरीर में त्रुटि शर्तों का विवरण JSON के रूप में शामिल करता हूं ताकि यूआई डेवलपर्स क्या करना है इसके बारे में बुद्धिमान विकल्प बनाने का प्रयास कर सकें।

{ 
    "status": 409, 
    "message": "The user <username> was already added on <when> by <who> and given the user id 12345.", 
    "errors": { 
    "id": 12345 
    } 
} 
संबंधित मुद्दे