draft-07 নাকি 2020-12
সংক্ষেপে: 2020-12 বর্তমান আর `$defs`, `prefixItems`, `unevaluatedProperties` যোগ করে, কিন্তু অনেক টুল এখনও কেবল draft-07 বোঝে। আপনার পুরো টুলচেইন কী সমর্থন করে তা দিয়ে বাছুন।

মূল কথা: নতুন প্রকল্পে 2020-12, যেকোনো ভ্যালিডেটর, কোড জেনারেটর বা OpenAPI টুল কেবল draft-07 সমর্থন করলেই সেখানে ফিরুন, আর সর্বদা $schema দিয়ে draft পিন করুন।
সংক্ষিপ্ত উত্তর: নতুন কাজে 2020-12, পুরোনো উপাদান বাধ্য করলে draft-07।
সময়রেখা
| Draft | বছর | উল্লেখযোগ্য |
|---|---|---|
| draft-04 | ২০১৩ | $id-এর বদলে id; পুরোনো API-তে এখনও সাধারণ |
| draft-06 | ২০১৭ | const, propertyNames |
| draft-07 | ২০১৮ | if/then/else, readOnly, contentMediaType; সেরা সামঞ্জস্য |
| 2019-09 | ২০১৯ | $defs definitions-কে প্রতিস্থাপন, unevaluatedProperties |
| 2020-12 | ২০২০ | prefixItems, $dynamicRef; বর্তমান সুপারিশ |
2020-12 কী উন্নত করে
অ্যারে টাপল আর বিশেষ কেস নয়। draft-07 "প্রথম এলিমেন্ট A, দ্বিতীয় B" প্রকাশ করে items: [{...}, {...}] প্লাস additionalItems দিয়ে। 2020-12 অবস্থান-নির্দিষ্ট স্কিমায় prefixItems আর বাকির জন্য items ব্যবহার করে।
$defs স্ট্যান্ডার্ড নাম। ২০১৯-এর পরে লেখা টুলিং ডিফল্টে সেখানেই খোঁজে।
unevaluatedProperties গঠনের সঙ্গে কাজ করে। allOf-এর সঙ্গে additionalProperties: false সহোদর শাখার ঘোষিত ফিল্ড প্রত্যাখ্যান করে। unevaluatedProperties: false কেবল পুরো স্কিমায় প্রকৃতভাবে মূল্যায়িত প্রপার্টি বিবেচনা করে, যা গঠনের প্রয়োজন।
কখন draft-07 সঠিক উত্তর
| পরিস্থিতি | কারণ |
|---|---|
| OpenAPI 3.0 | এর schema object draft-04/07 উপসেট |
| পুরোনো ভ্যালিডেটর (ajv 6, কিছু Java লাইব্রেরি) | এরা prefixItems বা $dynamicRef জানে না |
| প্ল্যাটফর্ম সংস্করণ বাধ্যতামূলক | কিছু লো-কোড প্ল্যাটফর্ম ও গেটওয়ে পিন করে |
| ০৭-এ থেমে যাওয়া কোড জেনারেটর | অজানা কি-ওয়ার্ড নীরবে উপেক্ষা হয় |
শেষ ক্ষেত্রটি সরাসরি পরীক্ষা করুন: আপনার ভ্যালিডেটরে prefixItems স্কিমা দিন। অজানা কি-ওয়ার্ড রিপোর্ট না করে বিনা অভিযোগে পাস করলে এটি বাধ্যবাধকতা উপেক্ষা করছে — সবচেয়ে বিপজ্জনক ফল।
সংস্করণ মেশানো
সর্বদা $schema ঘোষণা করুন। ডিফল্ট আলাদা: ajv draft-07 ধরে, কয়েকটি Python লাইব্রেরি 2020-12 ধরে। তখন একই ফাইল দুই জায়গায় আলাদাভাবে যাচাই হয়।
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/order.json",
"type": "object"
}
draft জুড়ে $ref করবেন না। আচরণ অনির্ধারিত।
ব্যাচে আপগ্রেড করুন। এক রিপোজিটরিতে দুই draft থাকলে "এখানে কোন নিয়ম প্রযোজ্য" উপজাত জ্ঞানে পরিণত হয়।
সাধারণ প্রশ্ন
আমার ভ্যালিডেটর 2020-12 সমর্থন করে কি না কীভাবে যাচাই করব?
prefixItems ব্যবহার করা স্কিমা ভ্যালিডেটরে দিন। unknown-keyword এরর মানে draft সমর্থন করে না; নীরবে পাস মানে বাধ্যবাধকতা উপেক্ষা করছে, যা আরও খারাপ।
এক প্রকল্পে একটাই draft ব্যবহার করা উচিত কেন?
এক রিপোজিটরিতে দুই draft "এখানে কোন নিয়ম প্রযোজ্য" উপজাত জ্ঞানে পরিণত করে। ব্যাচে আপগ্রেড করুন যাতে প্রতিটি ফাইল একই ব্যাখ্যা ভাগ করে।
সর্বদা $schema ঘোষণা করা উচিত?
হ্যাঁ। ডিফল্ট আলাদা: ajv draft-07 ধরে অথচ কয়েকটি Python লাইব্রেরি 2020-12 ধরে, তাই একই ফাইল দুই জায়গায় আলাদাভাবে যাচাই হতে পারে।