2012-03-27 13 views
15

के लिए अनुशंसित व्यवहार मैं एक आरईएसटी एपीआई फ्रेमवर्क लागू कर रहा हूं, और मुझे आश्चर्य है कि जब कोई क्लाइंट अमान्य क्वेरीस्ट्रिंग पैरामीटर सबमिट करता है तो अनुशंसित व्यवहार क्या होता है।आरईएसटी एपीआई फ्रेमवर्क। अमान्य क्वेरीस्ट्रिंग पैरामीटर

मैं उदाहरण देकर स्पष्ट करना होगा मैं एक विशिष्ट उदाहरण के साथ क्या मतलब है: कहो, मैं/api/संपर्क/endpoint पर एक API हैंडलर है, और हैंडलर जो ग्राहकों के साथ कुछ संपर्कों का चयन करने के लिए सक्षम बनाता है id नामक एक क्वेरी स्ट्रिंग फिल्टर, प्रदान करता है प्रदान की गई आईडी

तो, एक GET या DELETE अनुरोध /api/contacts/?id=2&id=4&id=lalalala हो सकता है।

स्पष्ट रूप से, id=lalalala के साथ संपर्क जैसी कोई चीज़ नहीं है। इस मामले में, सर्वर को किस तरह व्यवहार करना चाहिए?

  • id=lalalala साथ अवैध संपर्क पर ध्यान न दें, और केवल वैध आईडी, 2 और एक त्रुटि कोड है कि इस त्रुटि को इंगित के साथ 4.

  • जवाब पर संपर्कों को फ़िल्टर। यदि हां, तो कौन सा त्रुटि कोड प्रदान किया जाना चाहिए?

अग्रिम धन्यवाद।

संपादित करें: स्पष्टीकरण के लिए; मेरे द्वारा विकसित ढांचे का मुख्य फोकस, एक अनुमानित व्यवहार और इसलिए प्रतिक्रिया कोड है। इस कारण से, मैं चाहता हूं कि कम से कम संभावित आश्चर्य की उम्मीद करने के लिए, ग्राहक इस ढांचे पर बने एपीआई का उपभोग करें। तो, सवाल मूल रूप से है: क्या एपीआई इस मामले में एक त्रुटि लौटाएगी (और यदि हां, कौन सा)? या अमान्य फ़िल्टर प्रविष्टियों को अनदेखा करें, और केवल सही क्वेरीस्ट्रिंग पैरामीटर पर फ़िल्टर करें?

उत्तर

10

कानून के पत्र के बाद, प्रतिक्रिया 404 नहीं मिली जानी चाहिए। हालांकि, अगर आप 400 - खराब अनुरोध वापस करना पसंद करते हैं तो कोई भी आपके साथ परेशान नहीं होगा।

हालांकि मैं निश्चित रूप से एक 4XX स्थिति कोड वापस कर दूंगा। आप ग्राहक को यह जानना चाहते हैं कि उन्होंने एक त्रुटि की है।

+0

डेरेल, धन्यवाद। मैं आपके साथ असहमत हूं हालांकि प्रतिक्रिया 404 त्रुटि होनी चाहिए, क्योंकि एपीआई एंडपॉइंट सही है, और वैध संसाधन (उदाहरण के लिए/एपीआई/संपर्क /) पर नक्शे। एक 400 त्रुटि मुझे लगता है कि अधिक समझ में आता है :) –

+1

Darrel, आप निश्चित रूप से यहाँ एक बिंदु है। जैसा कि आपने शुरू में कहा था, हालांकि कानून के पत्र का पालन करने के बावजूद प्रतिक्रिया 404 त्रुटि हो सकती है, मैं 400 त्रुटि की ओर झुका रहा हूं। –

12

चूंकि यह एक आरईएसटी कॉल है, हम संसाधनों के बारे में बात कर रहे हैं। और जब भी हमारे पास गलत फ़िल्टर होता है, तो हमें एक उचित त्रुटि कोड वापस करना चाहिए।

इस मामले मैं 400 - bad request संसाधन के रूप में के लिए जाना होगा में मिला था और सही ढंग से मैप किया (/api/contacts), लेकिन query string भाग के साथ एक समस्या थी। इसलिए 400 और 404 नहीं।

404 वापस लौटाएगा अगर किसी ने /api/contacts-all या कुछ गैर-मौजूदा संसाधन का अनुरोध किया है।

संपादित नीचे

टिप्पणी के आधार पर अपनी टिप्पणी से सहमत हूँ। आदर्श रूप से 400 अनुरोध के साथ एक समस्या है। इसके द्वारा जाकर, आप 422 Unprocessable Entity का उपयोग कर सकते हैं। कृपया नीचे दिए गए स्टैक ओवरफ्लो लिंक को देखें और यह एक ही चीज़ के बारे में बात करता है।

मुझे लगता है कि होता है कि दुनिया भर में डेवलपर्स तथ्य के कारण और अधिक आरामदायक एक 400 ऐसे तार्किक त्रुटियों के लिए 422 से देखकर हो कि बड़ा कंपनियों 400 और नहीं 422 का उपयोग कर रहे हैं।

संदर्भ: प्रतिक्रिया के लिए Http status codes और 400 for logical error vs malformed request

+1

रवि, प्रतिक्रिया के लिए धन्यवाद। मैं मानता हूं कि एक 400 त्रुटि बहुत समझ में आता है। एकमात्र चीज जो मुझे ऐसा करने से रोकती है, यह है कि जब मैं अनुरोध निकाय में अमान्य डेटा शामिल करता हूं (उदाहरण के लिए PUT/POST अनुरोधों में), तो मैं 400 त्रुटि लौटाता हूं, और ऐसा लगता है कि यह थोड़ा सा अंतर्ज्ञानी है, फिर भी उचित है इस मामले में प्रतिक्रिया। –

+1

उपरोक्त संपादित उत्तर पर एक नज़र डालें। –

+0

रवि, धन्यवाद। बहुत पूर्ण और स्पष्ट प्रतिक्रिया। 422 त्रुटि सबसे सही प्रतिक्रिया प्रतीत होती है, क्योंकि अनुरोध अर्थात् गलत है। मैं इसे और अधिक अच्छी तरह से पढ़ूंगा और जल्द ही आपसे संपर्क करूंगा। –

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