2013-01-15 31 views
5

मैं वापस जाने के लिए उचित स्थिति कोड को खोजने के लिए कोशिश कर रहा हूँ, यहाँ क्या मैं अब तक मन में है है:आरईएसटी एपीआई उपयोगकर्ता किसी ऑब्जेक्ट को acces करने का प्रयास कर रहा है, तो एक HTTP स्थिति कोड का उपयोग करने के लिए और एक त्रुटि है?

  1. GET /api/documents/1 - 200 ठीक
  2. GET /api/documents/2 - - दस्तावेज़ मौजूद है, उपयोगकर्ता करता दस्तावेज़ मौजूद है, उपयोगकर्ता पहुँच गया है एक्सेस नहीं है - 403 निषिद्ध
  3. GET /api/documents/3 - दस्तावेज़ मौजूद नहीं है (जांच नहीं कर सकता है या नहीं) - 404 नहीं मिला? 403 निषिद्ध?
  4. GET /api/documents/a - आईडी अमान्य है (एक संख्या होनी चाहिए) - 400 खराब अनुरोध? 404 नहीं मिला? 403 निषिद्ध?

मेरी बैकएंड के साथ समस्या यह इस समय (MongoDB का प्रयोग करके) पहली बात मैं कर जाँच उपयोगकर्ता वह की पहुंच है दस्तावेज़ ID की एक सूची के खिलाफ चेक करके उसे दस्तावेज़ तक पहुँच गया है, तो यह है कि है। यदि सूची में दस्तावेज़_आईडी नहीं मिली है, तो 403 निषिद्ध स्वचालित रूप से वापस आ गया है। यह मुझे दस्तावेज़ को डीबी से पहले लाने से बचने में मदद करता है ताकि यह देखने के लिए कि उपयोगकर्ता इसका उपयोग कर सकता है या नहीं।

मुझे यकीन नहीं है कि यहां सबसे अच्छा अभ्यास क्या होगा - क्या मुझे बेहतर HTTP स्थिति कोड (और इस प्रकार अतिरिक्त डीबी अनुरोध बनाना) का पीछा करना चाहिए या 403 अंतिम 2 मामलों (3 और 4) के लिए निषिद्ध काम भी करना चाहिए?

उत्तर

0

मैं कहूंगा कि परिदृश्य # 3 के लिए इच्छित HTTP कोड का उपयोग करें, 404 का उपयोग करें (क्योंकि संसाधन नहीं मिला है लेकिन उपयोगकर्ता को एक्सेस अनुमतियां थीं), परिदृश्य # 4 400 का उपयोग करें (जैसा कि यह है वास्तव में एक बुरा अनुरोध)।

आपके कार्यान्वयन क्लाइंट को यह समझने में मदद करें कि वास्तव में क्या गलत हो रहा है। विशेष रूप से 404 के लिए, जो कि बहुत से सिस्टम सामान्य ऑपरेशन में आते हैं (यानी लॉगिन प्रमाण-पत्र या कुछ इसी तरह के लिए पूछताछ), ग्राहक को उनके अनुरोध को पूरा करने के सटीक कारण को समझने की आवश्यकता हो सकती है।

मैं यह देखने में असफल रहा कि उचित स्थिति कोड को वापस करने के परिणामस्वरूप अधिक डीबी अनुरोध होंगे। आप वैध 403 उपयोग के मामले के लिए अभी भी 403 वापस कर सकते हैं।

+0

मेरे पास current_user ऑब्जेक्ट हमेशा उपलब्ध है और इसमें पहले से ही दस्तावेज़_आईड्स (मोंगो नेस्टेड दस्तावेज़, मूल रूप से) की सूची शामिल है। यह पहली चीज है जिसे मैं जांचता हूं और यदि दस्तावेज़_आईडी सूची में नहीं मिला था, तो मैं 403 निषिद्ध त्रुटि लौटाता हूं। हालांकि, अगर मैं यह जांचना चाहता था कि ऑब्जेक्ट मौजूद नहीं है, तो मुझे इसके लिए एक अलग डीबी क्वेरी बनाना होगा। – ragulka

+0

@ragulka हां, लेकिन एक अतिरिक्त डीबी कॉल कैसे बनाएगा। आपसे सवाल है कि मैं समझ रहा हूं कि जब टीएच अनुरोध शुरू में किया जाता है, तो उपयोगकर्ता उस दस्तावेज़ पर प्रमाणित नहीं है, तो तुरंत आपकी वापसी 403 है। यदि वे प्रमाणीकृत हैं तो आप दस्तावेज़ की जांच करते हैं, और आप सोच रहे थे कि दस्तावेज गुम होने पर आपको 404 या 403 वापस करना चाहिए या नहीं। यदि आप उस मामले में 404 लौटते हैं, तो यह अतिरिक्त डीबी कॉल कैसे करेगा? –

9

मैं दोनों # 3 और # 4 के लिए सुझाव दूंगा।

1. प्राप्त/api/दस्तावेज/1 - 200 ठीक

उचित है - दस्तावेज़ मौजूद है, उपयोगकर्ता पहुँच नहीं है।

2. प्राप्त/API/दस्तावेज/2 - दस्तावेज़ मौजूद है, उपयोगकर्ता पहुँच नहीं है - 403 निषिद्ध

उचित है।

3. प्राप्त/एपीआई/दस्तावेज/3 - दस्तावेज़ मौजूद नहीं है (जांच नहीं कर सकता है या नहीं) - 404 नहीं मिला? 403 निषिद्ध? के बाद से दस्तावेज़ निर्दिष्ट यूआरआई पर मौजूद नहीं है

404 यहाँ उचित है।

4. प्राप्त/एपीआई/दस्तावेज/ए - आईडी अमान्य है (एक संख्या होना चाहिए) - 400 खराब अनुरोध? 404 नहीं मिला? 403 निषिद्ध?

404 अभी भी उचित यहाँ के बाद से कोई संसाधन निर्दिष्ट यूआरआई पर मौजूद है। संदर्भ के लिए, 400विकृत वाक्यविन्यास को संदर्भित करता है, लेकिन यूआरआई और अनुरोध पूरी तरह से वाक्यबद्ध रूप से वैध हैं; यह सिर्फ इतना है कि आपके सर्वर पर कोई संबंधित संसाधन उपलब्ध नहीं है।

सामान्य रूप से, आपको पहले एपीआई और मानक HTTP दृष्टिकोणों के बारे में सोचना चाहिए। चाहे किसी अन्य आंतरिक डेटाबेस अनुरोध की आवश्यकता हो या कार्यान्वयन की जानकारी हो। मैं समयपूर्व अनुकूलन से बचने का सुझाव दूंगा, खासतौर पर उन लोगों के लिए जो आपके ग्राहकों पर इतना प्रत्यक्ष प्रभाव डालेंगे।

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

  • कोई संबंधित समस्या नहीं^_^