जेएसओएन स्कीमा का उपयोग करने के बारे में मुझे क्या मिल सकता है, वैध डेटा का वर्णन करने के कार्यों (या कम से कम भेदभाव की कमी) के बारे में भ्रमित उलझन में प्रतीत होता है, मान्य संग्रहीत डेटा, और इनपुट डेटा मान्य।डेटा सत्यापन बनाम डेटा सत्यापन बनाम जेएसओएन स्कीमा बनाम इनपुट सत्यापन
एक विशिष्ट उदाहरण की तरह दिखता है:
var schema = {
type: 'object',
properties: {
id: { type: 'integer', required: true },
name: { type: 'string', required: true },
description: { type: 'string', required: false }
}
};
यह वही एक डेटा की दुकान में वैध डेटा यह सत्यापित करने के लिए की तरह दिखना चाहिए, और इसलिए वर्णन करने के लिए अच्छी तरह से काम करता है (उत्तरार्द्ध बहुत उपयोगी-अगर नहीं है क्या है एक स्टोर यह पहले से मान्य होना चाहिए):
var storedData = {
id: 123,
name: 'orange',
description: 'delicious'
};
यह इनपुट को मान्य करने के लिए अच्छी तरह से काम नहीं करता है। id
उपयोगकर्ता को इनपुट के हिस्से के रूप में प्रदान करने के लिए उत्पन्न करने के लिए सबसे अधिक संभावना है और नहीं। निम्नलिखित इनपुट सत्यापन में विफल रहता है, क्योंकि यह अभाव है id
जो स्कीमा वाणी required
होने के लिए:
var inputData = {
name: 'orange',
description: 'delicious'
};
ठीक है, एक कह सकते हैं, स्कीमा प्रत्यक्ष इनपुट को मान्य करने के लिए नहीं होती है, सत्यापन के बाद ही होने चाहिए एप्लिकेशन ने id
जोड़ा और डेटा संग्रहीत करने के लिए क्या है।
स्कीमा प्रत्यक्ष इनपुट को मान्य करने के लिए नहीं होती है अगर, हालांकि, क्या 1) JavaScript का बिंदु ब्राउज़र में चल प्रमाणकों, शायद प्रत्यक्ष इनपुट और 2) स्पष्ट रूप से इनपुट उन्मुख readonly
की बात खिलाया जा रहा है कल्पना में स्कीमा सुविधा?
ग्राउंड्स को गुणों के बारे में सोचते समय शेकियर हो जाता है जिसे एक बार सेट किया जा सकता है लेकिन अपडेट नहीं किया जा सकता है (जैसे उपयोगकर्ता नाम), साथ ही विभिन्न एक्सेस स्तर (जैसे व्यवस्थापक और नारंगी का मालिक description
को बदल सकता है, जबकि अन्य उपयोगकर्ताओं के लिए यह readonly
रहना चाहिए)।
इससे निपटने के लिए सबसे अच्छा (या कम से कम काम करने वाला) अभ्यास क्या है? प्रत्येक उपयोग मामले के लिए एक अलग स्कीमा, जैसे नीचे?
var baseSchema = {
type: 'object',
properties: {
id: { type: 'integer', required: true },
name: { type: 'string', required: true },
description: { type: 'string', required: false }
}
};
var ownerUpdateSchema = {
type: 'object',
properties: {
id: { type: 'integer', required: false, readonly: true },
name: { type: 'string', required: true },
description: { type: 'string', required: false }
}
};
var userUpdateSchema = {
type: 'object',
properties: {
id: { type: 'integer', required: false, readonly: true },
name: { type: 'string', required: false, readonly: true },
description: { type: 'string', required: false, readonly: true }
}
};
या कुछ और?
यदि आप 'केवल डेटा का वर्णन कर रहे हैं' तो यह निर्दिष्ट करना बहुत उपयोगी है कि आईडी आवश्यक है। यदि मैं आपके डेटा का उपभोग कर रहा हूं, तो मुझे पता है कि मैं इस क्षेत्र पर भरोसा कर सकता हूं, अन्यथा मुझे पहचानकर्ता के रूप में उपयोग करने के लिए कुछ और ढूंढना होगा। –