YamlBox

JSON उपकरण · 6 मिनट पढ़ें

JSON से JSON स्कीमा: नमूना पेलोड से अनुबंध तक

JSON से JSON स्कीमा रूपांतरण एक उदाहरण लेता है जो काम करता है और इसके आकार का मशीन-पठनीय विवरण तैयार करता है। वह विवरण भविष्य के पेलोड को मान्य कर सकता है, दस्तावेज़ तैयार कर सकता है, या टाइप किए गए कोड को ड्राइव कर सकता है - लेकिन केवल तभी जब आप जेनरेट किए गए स्कीमा को पहले ड्राफ्ट के रूप में मानते हैं। अनुमान एक नमूना देखता है, और एक नमूना बहुत आश्वस्त झूठा है।

अद्यतन

अनुमान क्या देख सकता है और क्या नहीं

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

उत्पन्न स्कीमा को सख्त बनाना

  1. दो या तीन वास्तविक नमूनों की तुलना करें: जो कुंजियाँ किसी नमूने से गायब हैं उन्हें `required` से बाहर कर देना चाहिए।
  2. जहाँ अर्थ ज्ञात हो वहाँ `format` जोड़ें - `date-time`, `email`, `uri`, `uuid`, `ipv4`।
  3. जब फ़ील्ड में वास्तव में एक निश्चित शब्दावली हो, जैसे स्थिति या क्षेत्र, तो खुले सेट को `enum` मानों में बदलें।
  4. संख्याओं को `minimum`, `maximum` और `multipleOf` से कसें ताकि कोई नकारात्मक मात्रा मान्य न हो सके।
  5. `additionalProperties: false` केवल तभी जोड़ें जब अज्ञात कुंजियों को अस्वीकार किया जाना चाहिए - अन्यथा आगे की अनुकूलता के लिए स्कीमा को खुला छोड़ दें।

प्रतिज्ञा की आवश्यकता है, अवलोकन की नहीं। किसी फ़ील्ड को चिह्नित करना आवश्यक है क्योंकि आपके एक नमूने में वह शामिल है, यह सबसे आम तरीका है जिससे एक अनुमानित स्कीमा वास्तविक एकीकरण को तोड़ता है।

जहां स्कीमा अपनी कमाई अर्जित करती है

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

                {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["id", "email"],
  "properties": {
    "id": { "type": "string", "format": "uuid" },
    "email": { "type": "string", "format": "email" },
    "plan": { "type": "string", "enum": ["free", "pro", "team"] }
  }
}
              

इसे संस्करण नियंत्रण में रखें

जनरेट किए गए स्कीमा उस समय ख़राब हो जाते हैं जब कोई उनका स्वामी नहीं होता। डेटा उत्पन्न करने वाले कोड के बगल में कठोर फ़ाइल को प्रतिबद्ध करें, इसे सीआई में सत्यापनकर्ता से संदर्भित करें, और केवल तभी पुन: उत्पन्न करें जब अनुबंध वास्तव में बदलता है - स्कीमा को आकार के लिए सत्य के स्रोत के रूप में और नमूने को साक्ष्य के रूप में मानें, न कि इसके विपरीत।

ब्राउज़र में अनुमान

वास्तविक पेलोड पहचानकर्ताओं, ईमेल और टोकन से भरे हुए हैं, इसलिए JSON से JSON स्कीमा रूपांतरण जो नमूना अपलोड करता है वह पूरी तरह से यांत्रिक संचालन के लिए उत्पादन डेटा सौंप रहा है। स्थानीय रूप से अनुमान लगाने से पेलोड टैब में रहता है, आपको बिना किसी दूसरे विचार के ग्राहक रिकॉर्ड पेस्ट करने की सुविधा मिलती है, और नेटवर्क कट ऑफ के साथ काम करता है।

JSON से JSON स्कीमा - अक्सर पूछे जाने वाले प्रश्न

प्रत्येक क्षेत्र आवश्यकतानुसार क्यों सामने आता है?

क्योंकि अनुमान एक नमूना देखता है और उस नमूने में प्रत्येक फ़ील्ड शामिल होती है। आवश्यक का मतलब गारंटी है, इसलिए उत्पन्न स्कीमा एक प्रारंभिक बिंदु है: कुछ नमूनों की तुलना करें, फिर उन कुंजियों को हटा दें जो कभी-कभी अनुपस्थित होती हैं और जहां आप वास्तविक नियमों को जानते हैं वहां `format` या `enum` बाधाएं जोड़ें।

मुझे किस JSON स्कीमा ड्राफ्ट का उपयोग करना चाहिए?

नए कार्य के लिए ड्राफ्ट 2020-12 - यह वर्तमान विनिर्देश है और एजेवी जैसे सत्यापनकर्ताओं द्वारा अच्छी तरह से समर्थित है। यदि आप ड्राफ्ट-07 पर पिन किए गए सिस्टम के साथ एकीकरण कर रहे हैं, तो ड्राफ्ट-07 दस्तावेज़ तैयार करते रहें; दोनों मुख्य रूप से नए कीवर्ड में भिन्न हैं जिनकी आपको संभवतः आवश्यकता नहीं होगी।

क्या JSON स्कीमा सरणियों को भी मान्य कर सकती है?

हाँ। सारणी अनुमान तत्व के आकार का वर्णन करने वाला एक `items` स्कीमा तैयार करता है और आधुनिक ड्राफ्ट में एकल तत्व आकार को `prefixItems` के साथ जांचा जा सकता है। दो नमूनों को अलग-अलग तत्व आकार के साथ मिलाएं और आप देखेंगे कि कहां `oneOf` की आवश्यकता है।

इस पोस्ट में उल्लिखित उपकरण

19 टूल की पूरी सूची ब्राउज़ करें

पढ़ने के लिए और लेख

6 मिनट पढ़ें

JSON से TypeScript: ऐसे प्रकार जो वास्तविकता से मेल खाते हैं

वास्तविक API प्रतिक्रिया से JSON को TypeScript इंटरफ़ेस में कनवर्ट करें - वैकल्पिक कुंजी, शून्य यूनियन, नेस्टेड प्रकार - और उत्पन्न प्रकारों को बहने से बचाएं।

6 मिनट पढ़ें

JSON फ़ॉर्मेटर: सुंदर, छोटा, और वास्तव में मान्य

एक JSON फ़ॉर्मेटर जो सटीक त्रुटि स्थानों के साथ सुंदर-प्रिंट, छोटा और मान्य करता है - साथ ही लगभग हर अमान्य JSON त्रुटि के पीछे पाँच सिंटैक्स गलतियाँ।

6 मिनट पढ़ें

JSON अंतर: डेटा की तुलना उस तरह से करना जैसे वह वास्तव में

एक संरचनात्मक JSON अंतर के साथ दो JSON पेलोड की तुलना करें जो कुंजी क्रम और रिक्त स्थान को अनदेखा करता है, स्थानांतरित मानों को हाइलाइट करता है, और दिखाता है कि पाठ भिन्न क्यों गुमराह करता है।

सभी 19 पोस्ट →