क्या मुझे अज्ञात मापदंडों की अनुमति होनी चाहिए?


12

I

यदि कोई क्लाइंट बिना मान्यता प्राप्त पैरामीटर भेजता है तो क्या मुझे तेजी से विफल होना चाहिए? उदाहरण के लिए,

http://example.com/api/foo?bar=true&paula=bean

उपरोक्त में, barएक मान्य पैरामीटर है लेकिन paulaएपीआई द्वारा निर्दिष्ट नहीं है। क्या मैं

  • त्रुटि के क्लाइंट को चेतावनी दें
  • तेजी से असफल
  • अनदेखी करो इसे

यदि मैं क्लाइंट को चेतावनी देता हूं, तो मैं केवल पहले पैरामीटर के लिए एक चेतावनी जारी कर सकता हूं, क्योंकि वे उनमें से लगभग एक अनंत संख्या में भेज सकते हैं, और सर्वर को संभवतः बेहतर काम करना है। इसी तरह, असफल होने पर, यह केवल समस्या के रूप में पहला अमान्य परम निर्दिष्ट करेगा।

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

क्या मेरे तर्कों का कोई मतलब है? क्या ऐसी चीजों पर एक स्वीकृत अभ्यास है?


एक छोटे से परीक्षण के आधार पर, मैंने जिन साइटों का परीक्षण किया है, वे केवल उन अज्ञात मापदंडों की उपेक्षा करते हैं जो मैंने उन्हें आपूर्ति की थी।
बार्ट वैन इनगेन शानौ

@BartvanIngenSchenau यहां भी। यह वेब पृष्ठों के लिए ठीक है, लेकिन मुझे नहीं लगता कि यह वास्तविक एपीआई के लिए ठीक है
राठ

2
एक चिंता आगे अनुकूलता है। यदि अज्ञात तर्कों को अनदेखा किया जाता है, तो भविष्य के संस्करणों में उन्हें इस तरह से उपयोग करना संभव है कि ग्राहक नए एपीआई पर प्रोग्राम कर सकते हैं और अभी भी पुराने सर्वर पर उचित व्यवहार प्राप्त कर सकते हैं।
Walpen

@walpen यह एक दिलचस्प बिंदु है। वर्जन किए गए URL api/v1आदि का उपयोग करने से उस पर ध्यान जाएगा, लेकिन यह अभी भी वृद्धिशील अपडेट की अनुमति नहीं देता है। +1
रथ

वहाँ आप वास्तविक लाइव परिप्रेक्ष्य से कुछ समर्थक और विपक्ष पा सकते हैं: सख्त पैरामीटर और अपना एपीआई
रीमेक अम्ब्रोज़ियाक

जवाबों:


12

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

एक अधिक व्यावहारिक दृष्टिकोण अमान्य परमेस को अनदेखा करने के लिए हो सकता है, लेकिन आप जिस तरह से जाते हैं, व्यवहार को अच्छी तरह से दस्तावेज करना सुनिश्चित करें।


1
एक विस्तार के रूप में: यदि कोई ग्राहक कुछ अज्ञात / आसानी से / पदावनत पैरामीटर भेजता है, तो इसका मतलब है कि ग्राहक को कुछ व्यवहार की उम्मीद है जो पूरा नहीं होगा। और इसलिए कोई भी कार्य करना खतरनाक है। इसलिए मैं सहमत हूँ, सख्ती से बुरा अनुरोध
Stepan Stepanov

धन्यवाद @StepanStepanov, लेकिन "स्वीकार करने वाले में स्पष्टवादी रहें, जो आप बाहर भेजते हैं, उसके बारे में स्पष्ट है" दर्शन वेब की वास्तुकला से बहुत कुछ अंतर्निहित है। इस बात को ध्यान में रखते हुए, मैं अपने पहले से लिखे गए विरोध के जवाब में आसानी से लिख सकता हूं।
रबरडक

3
मैंने इसे देख लिया है)) और पोस्टेल के कानून के बारे में पेज का कहना है कि "कोड जो इनपुट प्राप्त करता है उसे गैर-अनुरूप इनपुट स्वीकार करना चाहिए जब तक कि अर्थ स्पष्ट है"। मुझे लगता है, अगर ग्राहक हमें कुछ अज्ञात पैरामीटर भेजते हैं, तो इसका अर्थ स्पष्ट नहीं हो सकता है। यदि क्लाइंट हमें एक पदावनत पैरामीटर भेजता है तो यह स्पष्ट है, यह पहले और क्लाइंट की अपेक्षा के अनुसार काम नहीं करेगा। यदि क्लाइंट हमें केवल-पढ़ने के लिए पैरामीटर भेजता है तो यह स्पष्ट है, यह नहीं लिखा जाएगा जैसा ग्राहक चाहते हैं।
Stepan Stepanov

0

यदि आप सार्वजनिक एपीआई (या एपीआई जो अन्य टीम द्वारा उपयोग किया जाएगा) करते हैं, तो मैं @RubberDuck के अनुसार त्रुटि को वापस करने की सलाह दूंगा।

यदि आपकी एपीआई केवल आपकी टीम के अंदर (या केवल अपने आप से) भस्म हो जाएगी, तो अतिरिक्त फ़ील्ड्स को अनदेखा करना आसान हो सकता है (उदाहरण के लिए कम कोड और आसान करने की आवश्यकता होती है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.