जब मैंने अतीत में इस तरह के एपीआई विकसित किए हैं, तो मैंने कुछ भी मान्य किया है जो मुझे लगता है कि एक "प्रमुख" आवश्यकता है - आपके उदाहरण में, मैं पहले दो तर्कों को सत्यापित करता हूं।
जब तक आप समझदार डिफ़ॉल्ट निर्दिष्ट करते हैं, तो यह आपके उपयोगकर्ता के लिए यह निर्धारित करना बहुत आसान होना चाहिए कि "वैकल्पिक" तर्क सही ढंग से निर्दिष्ट नहीं हैं, क्योंकि इससे एप्लिकेशन में कोई बदलाव नहीं आएगा, लेकिन सब कुछ अभी भी काम करेगा अच्छी तरह।
यदि एपीआई जटिल है, तो मैं हारून की सलाह के बाद सुझाव देना चाहूंगा - टिप्पणियां जोड़ें जिन्हें आपके सत्यापन के चारों ओर एक कंप्रेसर द्वारा पार्स किया जा सकता है ताकि डेवलपर्स को सत्यापन का लाभ मिल सके, लेकिन कोड को दबाते समय अतिरिक्त मृत वजन निकाल सकते हैं उत्पादन में
संपादित करें:
Here're कुछ मैं ऐसे मामलों में जहां सत्यापन के लिए आवश्यक है में क्या करना पसंद है क्या का उदाहरण। यह विशेष मामला बहुत सरल है; मैं शायद इसके लिए सत्यापन के साथ परेशान नहीं होगा, क्योंकि यह वास्तव में तुच्छ है। आपकी जरूरतों के आधार पर, कभी-कभी प्रकारों को बल देने का प्रयास सत्यापन से बेहतर होगा, जैसा कि पूर्णांक मान के साथ प्रदर्शित किया गया है।
मान लें विस्तार() एक समारोह है कि वस्तुओं विलीन हो जाती है है, और सहायक कार्यों मौजूद हैं:
var f = function(args){
args = extend({
foo: 1,
bar: function(){},
biz: 'hello'
}, args || {});
// ensure foo is an int.
args.foo = parseInt(args.foo);
//<validation>
if(!isNumeric(args.foo) || args.foo > 10 || args.foo < 0){
throw new Error('foo must be a number between 0 and 10');
}
if(!isFunction(args.bar)){
throw new Error('bar must be a valid function');
}
if(!isString(args.biz) || args.biz.length == 0){
throw new Error('biz must be a string, and cannot be empty');
}
//</validation>
};
संपादित करें 2:
आप इसका प्रयोग गलत वर्तनी से बचना चाहते हैं, तो आप या तो 1) स्वीकार कर सकते हैं और उन्हें फिर से असाइन करें या 2) तर्क गणना मान्य करें। विकल्प 1 आसान है, विकल्प 2 Object.extendStrict (जैसे, इस तरह से किया जा सकता है, हालांकि मैं निश्चित रूप से अपनी ही विधि में यह refactor चाहते हैं, कुछ) (उदाहरण के कोड डब्ल्यू/प्रोटोटाइप काम करता है):
var args = {
ar: ''
};
var base = {
foo: 1,
bar: function(){},
biz: 'hello'
};
// save the original length
var length = Object.keys(base).length;
// extend
args = Object.extend(base, args || {});
// detect if there're any extras
if(Object.keys(args).length != length){
throw new Error('Invalid argument specified. Please check the options.')
}
यह एक अच्छा विचार है। इसके शीर्ष पर, आप अपने तर्कों को सत्यापित करने के लिए एक समारोह को 'सजाने' भी कर सकते हैं, और मूल कार्य 'साफ' छोड़ सकते हैं। – xtofl