JSON Schema Validator
নতুনValidate JSON against a JSON Schema (draft-07 / draft-2020-12) with clear error messages.
Runs entirely in your browser. Nothing is uploaded.
JSON স্কিমা কী এবং এটি কেন গুরুত্বপূর্ণ
JSON (JavaScript Object Notation) ওয়েব API, কনফিগারেশন ফাইল এবং ডেটা ইন্টারচেঞ্জের ভাষা। কিন্তু কাঁচা JSON-এ কোনো বিল্ট-ইন টাইপ সিস্টেম নেই — একটি ফিল্ড একদিন একটি স্ট্রিং হতে পারে এবং পরের দিন একটি নম্বর, আর এই অমিল আবিষ্কার করার একমাত্র উপায় হলো একটি রানটাইম ক্র্যাশ বা একটি সূক্ষ্ম ডেটা বাগ। JSON স্কিমা এই ফাঁক পূরণ করে: এটি একটি JSON ডকুমেন্টের প্রত্যাশিত গঠন ও সীমাবদ্ধতা বর্ণনা করার একটি ঘোষণামূলক শব্দভান্ডার, রানটাইমে প্রকৃত ডেটার বিপরীতে যাচাই করা হয়।
টিমগুলো প্রসেস করার আগে API রিকোয়েস্ট পেলোড যাচাই করতে, স্টার্টআপে লোড হওয়া কনফিগারেশন ফাইলের গঠন প্রয়োগ করতে, একক সত্যের উৎস থেকে ডকুমেন্টেশন ও UI ফর্ম স্বয়ংক্রিয়ভাবে তৈরি করতে, এবং মাইক্রোসার্ভিস জুড়ে কনট্র্যাক্ট সামঞ্জস্য বজায় রাখতে JSON স্কিমা ব্যবহার করে। OpenAPI — REST API ডকুমেন্টেশনের মানদণ্ড — সরাসরি JSON স্কিমার ওপর তৈরি, যা এটিকে ওয়েবের সবচেয়ে ব্যাপকভাবে স্থাপিত ডেটা যাচাইকরণ মানদণ্ড করে তোলে।
JSON স্কিমা ড্রাফট ভার্সন: Draft-07, Draft 2019-09, এবং Draft 2020-12
JSON স্কিমা বেশ কয়েকটি স্পেসিফিকেশন ড্রাফটের মধ্য দিয়ে গেছে। Draft-07, ২০১৮ সালে রিলিজ হয়েছে, সব মূলধারার ভ্যালিডেটর লাইব্রেরি জুড়ে সবচেয়ে ব্যাপকভাবে সমর্থিত এবং OpenAPI 3.0-এ ব্যবহৃত ডায়ালেক্ট। এটি শক্তিশালী if/then/else শর্তসাপেক্ষ যাচাইকরণ কীওয়ার্ড, readOnly/writeOnly প্রপার্টি টীকা, এবং কনটেন্ট এনকোডিং কীওয়ার্ড চালু করেছে। আপনি যদি আজ স্কিমা লিখছেন এবং নতুনতম ফিচার প্রয়োজন না হয়, সর্বাধিক ইকোসিস্টেম সামঞ্জস্যের জন্য Draft-07 নিরাপদ পছন্দ।
Draft 2020-12 হলো বর্তমান স্থিতিশীল স্পেসিফিকেশন এবং বেশ কয়েকটি উল্লেখযোগ্য পরিবর্তন চালু করে: টাপল যাচাইকরণের জন্য items কীওয়ার্ড prefixItems দ্বারা প্রতিস্থাপিত হয়, ডাইনামিক রেফারেন্স $recursiveRef-এর বদলে $dynamicRef ব্যবহার করে, এবং নতুন unevaluatedProperties ও unevaluatedItems কীওয়ার্ড অতিরিক্ত কনটেন্টের ওপর আরও সুনির্দিষ্ট নিয়ন্ত্রণ দেয়। শুধু Draft 2020-12 ব্যবহার করুন যদি আপনি OpenAPI 3.1-এ থাকেন বা সেই নির্দিষ্ট ফিচারগুলো প্রয়োজন হয় — বৃহত্তর ভ্যালিডেটর ইকোসিস্টেম এখনও সম্পূর্ণ সমর্থনে ধরার চেষ্টা করছে।
মূল JSON স্কিমা কীওয়ার্ডের ব্যাখ্যা
type কীওয়ার্ড একটি ডেটা টাইপ প্রয়োগ করে: string, number, integer, boolean, array, object, বা null। required সেই প্রপার্টিগুলো তালিকাভুক্ত করে যা একটি অবজেক্টে অবশ্যই উপস্থিত থাকতে হবে। properties প্রতিটি প্রপার্টি নামকে তার নিজস্ব সাব-স্কিমার সাথে ম্যাপ করে। pattern একটি স্ট্রিং মানে একটি রেগুলার এক্সপ্রেশন প্রয়োগ করে। minimum, maximum, minLength, এবং maxLength সাংখ্যিক ও স্ট্রিং পরিসীমা সীমাবদ্ধ করে। enum একটি মানকে অনুমোদিত মানের একটি স্থির সেটে সীমাবদ্ধ করে; const এটিকে একটি একক মানে সীমাবদ্ধ করে।
কম্পোজিশন কীওয়ার্ড আপনাকে সহজ বিল্ডিং ব্লক থেকে জটিল নিয়ম তৈরি করতে দেয়: allOf লজিক্যাল AND-এর মতো কাজ করে, anyOf OR-এর মতো, এবং oneOf XOR-এর মতো। not কীওয়ার্ড একটি স্কিমা উল্টে দেয়। if/then/else কীওয়ার্ড শর্তসাপেক্ষ যাচাইকরণ সক্ষম করে — ডেটা if স্কিমা পূরণ করে কিনা তার ওপর নির্ভর করে ভিন্ন নিয়ম প্রযোজ্য হয়। একসাথে এগুলো আপনাকে কাস্টম ইম্পারেটিভ কোড না লিখেই প্রায় যেকোনো যাচাইকরণ নিয়ম প্রকাশ করতে দেয়।
প্রোডাকশনে JSON স্কিমা: API কনট্র্যাক্ট এবং CI পাইপলাইন
প্রোডাকশন সিস্টেমে, JSON স্কিমা যাচাইকরণ Ajv (জাভাস্ক্রিপ্ট/Node.js), jsonschema (Python), বা Newtonsoft.Json (C#)-এর মতো লাইব্রেরি ব্যবহার করে সার্ভার-সাইড বা CI পাইপলাইনে চলে। স্কিমাগুলো অ্যাপ্লিকেশন কোডের পাশাপাশি ভার্সন কন্ট্রোলে কমিট করা হয় যাতে কনট্র্যাক্ট পরিবর্তন অন্য যেকোনো পরিবর্তনের মতো পর্যালোচনা ও ট্র্যাক করা হয়। ব্রেকিং পরিবর্তন — একটি প্রয়োজনীয় ফিল্ড সরানো, একটি টাইপ সংকীর্ণ করা — প্রোডাকশনে পৌঁছে গ্রাহকদের ভাঙার আগে কোড রিভিউতে ধরা পড়ে।
এই ব্রাউজার-ভিত্তিক টুল কমিট করার আগে পুনরাবৃত্তিমূলকভাবে স্কিমা ডিজাইন ও ডিবাগ করার জন্য আদর্শ। আপনার ডেটা পেস্ট করুন, আপনার স্কিমা লিখুন, Validate ক্লিক করুন, বিস্তারিত এরর মেসেজ পড়ুন, এবং পরিমার্জন করুন — কোনো সার্ভার নেই, কোনো npm install নেই, কোনো রাউন্ড ট্রিপ নেই। ভ্যালিডেটরটি প্রতিটি যাচাইকরণ রানে আপনার JSON প্রিটি-প্রিন্টও করে, এটিকে একটি সুবিধাজনক সম্মিলিত JSON ফরম্যাটার ও স্কিমা টেস্টার করে তোলে। একবার আপনার স্কিমা এখানে যাচাই হয়ে গেলে, এটি সরাসরি আপনার OpenAPI স্পেক বা অ্যাপ্লিকেশন কনফিগারেশনে ফেলুন।
ব্যবহারিক উদাহরণ: একটি API রেসপন্স যাচাই করা
ধরুন আপনার API একটি ইউজার অবজেক্ট ফেরত দেয়। একটি JSON স্কিমা যা এটি যাচাই করে তার জন্য একটি ইন্টিজার id, একটি খালি-নয় স্ট্রিং name, একটি ইমেইল প্যাটার্নের সাথে মেলা একটি স্ট্রিং email, এবং 'admin', 'editor', এবং 'viewer'-এর একটি enum থেকে একটি ঐচ্ছিক স্ট্রিং role প্রয়োজন হতে পারে। additionalProperties-কে false সেট করা নিশ্চিত করে যে আপনার API কখনও নীরবে এমন অলিখিত ফিল্ড ফেরত দেয় না যার ওপর ডাউনস্ট্রিম গ্রাহকরা অসাবধানতাবশত নির্ভর করতে পারেন।
if/then/else ফিচার শর্তসাপেক্ষ নিয়ম সক্ষম করে — উদাহরণস্বরূপ, role যদি 'admin' হয় তাহলে একটি permissions অ্যারে প্রয়োজন, নয়তো এটি নিষিদ্ধ। এই কম্পোজিশনাল নিয়মগুলো একটি একক স্কিমাকে প্রপার্টি সংজ্ঞা ডুপ্লিকেট না করেই একটি অবজেক্টের একাধিক বৈধ আকার কভার করতে দেয়। কোডবেসে এম্বেড করার আগে এখানে সেই স্কিমা লেখা ও পরীক্ষা করা প্রোডাকশনে উল্লেখযোগ্য ডিবাগিং সময় বাঁচায়। তাৎক্ষণিকভাবে শুরু করতে বিল্ট-ইন উদাহরণ প্রিসেট (User Profile, Product, Address) ব্যবহার করুন।
UtiloKit অন্যান্য JSON স্কিমা ভ্যালিডেটরের সাথে কীভাবে তুলনীয়
বেশিরভাগ অনলাইন JSON স্কিমা ভ্যালিডেটর টুল দুটি বিভাগে পড়ে: ভিজ্যুয়াল স্কিমা বিল্ডার এবং সার্ভার-সাইড API ভ্যালিডেটর। jsonschema.net আপনাকে স্কিমা তৈরি করতে একটি পয়েন্ট-এন্ড-ক্লিক UI দিয়ে বাধ্য করে — এটি স্কিমা গঠন শেখা শুরুকারীদের জন্য উপযোগী, কিন্তু তাদের জন্য ধীর যারা ইতিমধ্যে জানেন তাদের কোন কীওয়ার্ড প্রয়োজন এবং শুধু তারা যে স্কিমা লিখেছেন তা পরীক্ষা করতে চান। আপনি সরাসরি কাঁচা Draft-07 JSON পেস্ট করে দ্রুত পুনরাবৃত্তি করতে পারবেন না।
Microsoft-এর Newtonsoft.Json লাইব্রেরির ওপর তৈরি jsonschemavalidator.net, .NET প্রপার্টি পাথ ও এরর কোড ব্যবহার করে ত্রুটি রিপোর্ট করে যা জাভাস্ক্রিপ্ট ডেভেলপারদের কাছে অপরিচিত মনে হয়। এরর মেসেজগুলো সঠিক কিন্তু .NET অবজেক্ট মডেলের চারপাশে গঠিত, আপনার Node.js কোড যে JSON পয়েন্টার পাথ দেখবে তা নয়। Stoplight এবং SwaggerHub-এর মতো টুল একটি সম্পূর্ণ OpenAPI ডকুমেন্টের অংশ হিসেবে স্কিমা যাচাই করে এবং একটি প্রজেক্ট সেটআপ ও অ্যাকাউন্ট প্রয়োজন।
UtiloKit-এর ভ্যালিডেটর একই Ajv ইঞ্জিনে চলে যা বেশিরভাগ Node.js, Express, এবং Fastify অ্যাপ্লিকেশনে শক্তি সরবরাহ করে। এরর মেসেজ, JSON পয়েন্টার পাথ, এবং কীওয়ার্ড আচরণ ঠিক আপনার প্রোডাকশন পরিবেশের সাথে মেলে — এবং এটি আপনার ব্রাউজারে কোনো অ্যাকাউন্ট, কোনো আপলোড, কোনো ফাইল সাইজ সীমা, এবং কোনো দৈনিক ব্যবহার সীমা ছাড়াই ফ্রিতে চলে।
JSON স্কিমার সংক্ষিপ্ত ইতিহাস: IETF ড্রাফট থেকে বাস্তবিক মানদণ্ডে
JSON নিজেই Douglas Crockford দ্বারা আনুষ্ঠানিক করা হয় এবং ২০০১ সালে প্রকাশিত হয়, মূলত জাভাস্ক্রিপ্ট থেকে বের করা একটি হালকা ডেটা ইন্টারচেঞ্জ ফরম্যাট হিসেবে। এর ন্যূনতম সিনট্যাক্স ও সাধারণ ডেটা স্ট্রাকচারে সরাসরি ম্যাপিংয়ের কারণে এটি দ্রুত ওয়েব API-তে XML-কে প্রতিস্থাপন করে। কিন্তু JSON-এর সরলতাও একটি সীমাবদ্ধতা ছিল: ফরম্যাটটির কোনো নেটিভ টাইপ সিস্টেম নেই, কোনো বিল্ট-ইন সীমাবদ্ধতা নেই, এবং একটি বৈধ ডকুমেন্ট কেমন দেখতে হবে তা বর্ণনা করার কোনো উপায় নেই। সেই ফাঁকটি JSON স্কিমা তৈরির দিকে নিয়ে যায়। Kris Zyp ২০০৯ সালে একটি IETF ইন্টারনেট ড্রাফট হিসেবে প্রথম JSON স্কিমা স্পেসিফিকেশন রচনা করেন, JSON নিজেই ব্যবহার করে JSON ডকুমেন্ট টীকা ও যাচাই করার একটি শব্দভান্ডার সরবরাহ করে — কোনো নতুন সিনট্যাক্স প্রয়োজন ছাড়াই।
২০০৯ সাল থেকে, JSON স্কিমা বেশ কয়েকটি অসামঞ্জস্যপূর্ণ স্পেসিফিকেশন ড্রাফটের মধ্য দিয়ে এগিয়েছে। Draft-03 (২০১০) এবং draft-04 (২০১৩) মূল কীওয়ার্ড সেট প্রতিষ্ঠা করে এবং $ref রেফারেন্সিং মেকানিজম চালু করে। Draft-06 এবং draft-07 (২০১৭-২০১৮) টাইপ-নির্দিষ্ট কীওয়ার্ড পরিমার্জন করে এবং if/then/else শর্তসাপেক্ষ যাচাইকরণ যোগ করে। Draft 2019-09 স্পেসিফিকেশনকে একটি মডুলার শব্দভান্ডারে পুনর্গঠিত করে এবং নামাঙ্কিত অ্যাঙ্করের জন্য $anchor চালু করে। Draft 2020-12 — বর্তমান সুপারিশকৃত সংস্করণ — টাপল ফর্ম items-কে prefixItems দিয়ে প্রতিস্থাপন করে, রিকার্সিভ স্কিমার জন্য $dynamicRef চালু করে, এবং আরও সুনির্দিষ্ট ক্লোজড-স্কিমা সেমান্টিক্সের জন্য unevaluatedProperties ও unevaluatedItems যোগ করে। একটি ডকুমেন্টের রুটে $schema কীওয়ার্ড কোন ড্রাফটকে একটি স্কিমা টার্গেট করে তা শনাক্ত করে — উদাহরণস্বরূপ, "$schema": "https://json-schema.org/draft/2020-12/schema" — যাতে ভ্যালিডেটর সঠিক ডায়ালেক্ট নিয়ম প্রয়োগ করতে পারে।
draft 2020-12 বর্তমান স্পেক হওয়া সত্ত্বেও, draft-07 বাস্তবে সবচেয়ে ব্যাপকভাবে স্থাপিত সংস্করণ থেকে যায়। জাভাস্ক্রিপ্টে Ajv, Python-এ jsonschema, C#-এ Newtonsoft.Json, এবং OpenAPI 3.0 স্পেসিফিকেশন — বৃহত্তর ইকোসিস্টেম draft-07-এ প্রমিতকরণ করেছে এবং বড় স্কিমা লাইব্রেরি আপগ্রেড করার মাইগ্রেশন খরচ বেশি। এটি লক্ষ্য করা গুরুত্বপূর্ণ যে JSON স্কিমা IETF ইন্টারনেট ড্রাফট স্ট্যাটাস বহন করে, মানে এটি এখনও একটি আনুষ্ঠানিক RFC মানদণ্ড নয়। তবুও এটি JSON ডেটা যাচাইকরণের জন্য একটি বাস্তবিক মানদণ্ড হিসেবে কাজ করে: এটি OpenAPI-তে এম্বেড করা, VS Code-এর IntelliSense ইঞ্জিনে রেফারেন্স করা, AWS CDK দ্বারা ব্যবহৃত, এবং বেশিরভাগ বড় প্রযুক্তি কোম্পানিতে CI পাইপলাইনে যাচাই করা হয়। JSON Schema সংস্থাটি একটি উন্মুক্ত গভর্নেন্স মডেলের অধীনে json-schema.org-এ স্পেসিফিকেশনটি রক্ষণাবেক্ষণ করে।
মূল JSON স্কিমা কীওয়ার্ড: একটি ব্যবহারিক রেফারেন্স
JSON স্কিমার টাইপ সিস্টেম সাতটি প্রাইমিটিভ টাইপ কভার করে: string, number, integer, boolean, object, array, এবং null। type কীওয়ার্ড একটি একক স্ট্রিং বা একটি অ্যারে গ্রহণ করতে পারে — "type": ["string", "null"] নালযোগ্য ফিল্ডের জন্য স্ট্যান্ডার্ড প্যাটার্ন, স্পষ্ট করে দেয় যে একটি ফিল্ড বৈধভাবে অনুপস্থিত বা নাল হতে পারে একটি মান প্রয়োজন করার বদলে। অবজেক্ট যাচাইকরণ প্রতি-প্রপার্টি সাব-স্কিমা সংজ্ঞায়িত করতে properties, বাধ্যতামূলক প্রপার্টি নাম তালিকাভুক্ত করতে required, এবং অজানা কী নিয়ন্ত্রণ করতে additionalProperties ব্যবহার করে। additionalProperties: false সেট করা একটি "বন্ধ" স্কিমা তৈরি করে যা properties-এর অধীনে স্পষ্টভাবে তালিকাভুক্ত নয় এমন যেকোনো প্রপার্টি প্রত্যাখ্যান করে — API পেলোডের জন্য সবচেয়ে কঠোর কনট্র্যাক্ট। patternProperties ডাইনামিকভাবে নামাঙ্কিত কীয়ের জন্য রেজেক্স প্যাটার্নকে সাব-স্কিমায় ম্যাপ করে। minProperties এবং maxProperties একটি অবজেক্ট কতগুলো কী বহন করতে পারে তা সীমাবদ্ধ করে।
অ্যারে যাচাইকরণ প্রতি-এলিমেন্ট সাব-স্কিমার জন্য items (draft-07) বা prefixItems (draft 2020-12) ব্যবহার করে। items একটি একক স্কিমা হলে, প্রতিটি এলিমেন্ট এটি পূরণ করতে হবে — সমসত্ত্ব তালিকার জন্য উপযোগী। draft-07-এ items একটি স্কিমার অ্যারে হলে, প্রতিটি অবস্থান সংশ্লিষ্ট স্কিমার বিপরীতে যাচাই করা হয় — এটি টাপল যাচাইকরণ, যেখানে ক্রম গুরুত্বপূর্ণ। minItems এবং maxItems অ্যারের দৈর্ঘ্য সীমাবদ্ধ করে; uniqueItems: true সেট সেমান্টিক্স প্রয়োগ করে। স্ট্রিং যাচাইকরণ কীওয়ার্ডে minLength, maxLength, এবং রেজেক্স সীমাবদ্ধতার জন্য pattern অন্তর্ভুক্ত। format কীওয়ার্ড সিমান্টিক সংকেত সরবরাহ করে — "email", "date-time", "uri", এবং "ipv4"-এর মতো মান — কিন্তু ডিফল্টভাবে এটি শুধু একটি টীকা। format প্রয়োগ করতে ভ্যালিডেটরকে স্পষ্টভাবে কনফিগার করতে হবে (Ajv-তে, { formats: "full" } পাস করুন বা ajv-formats ইনস্টল করুন)। নম্বর যাচাইকরণ minimum, maximum, exclusiveMinimum, exclusiveMaximum, এবং ভাগযোগ্যতা সীমাবদ্ধতার জন্য multipleOf ব্যবহার করে।
কম্পোজিশন কীওয়ার্ডই JSON স্কিমাকে এর অভিব্যক্তিমূলক শক্তি দেয়। allOf ডেটাকে একই সাথে তালিকাভুক্ত সব সাব-স্কিমা পূরণ করার প্রয়োজন করে — একটি লজিক্যাল AND, প্রায়ই বেস স্কিমাকে এক্সটেনশন স্কিমার সাথে স্তরিত করতে ব্যবহৃত। anyOf অন্তত একটি সাব-স্কিমা পাস করার প্রয়োজন করে — লজিক্যাল OR, ইউনিয়ন টাইপের জন্য ব্যবহৃত। oneOf ঠিক একটি সাব-স্কিমা পাস করার প্রয়োজন করে — লজিক্যাল XOR, উপযোগী যখন সাব-স্কিমা পরস্পর একচেটিয়া এবং আপনি অস্পষ্ট ইনপুট চিহ্নিত করতে চান। not কীওয়ার্ড একটি সাব-স্কিমা ফলাফল উল্টে দেয়, বাদ দেওয়া প্যাটার্ন সক্ষম করে। $ref ডকুমেন্টের অন্য কোথাও সংজ্ঞায়িত একটি সাব-স্কিমা রেফারেন্স করে — সাধারণত $defs (draft 2020-12) বা লিগ্যাসি definitions কী-এর অধীনে — স্কিমাগুলোকে DRY ও মডুলার রাখে। একসাথে এই প্রাইমিটিভগুলো আপনাকে যেকোনো গঠনগত নিয়ম সঠিকভাবে প্রকাশ করতে দেয় যা অন্যথায় শত শত লাইনের ইম্পারেটিভ যাচাইকরণ কোড প্রয়োজন করতে পারত।
Ajv, ভ্যালিডেটর ইকোসিস্টেম, এবং জাভাস্ক্রিপ্টের বাইরে JSON স্কিমা
Ajv (Another JSON Validator), Evgeny Poberezkin দ্বারা তৈরি এবং ওপেন সোর্স হিসেবে রিলিজ করা, সবচেয়ে দ্রুততম ও সবচেয়ে ব্যাপকভাবে ব্যবহৃত জাভাস্ক্রিপ্ট JSON স্কিমা ভ্যালিডেটর। এর মূল স্থাপত্যগত উদ্ভাবন হলো জাস্ট-ইন-টাইম কম্পাইলেশন: Ajv একটি স্কিমাকে প্রথমবার ব্যবহারের সময় একটি নেটিভ জাভাস্ক্রিপ্ট ফাংশনে কম্পাইল করে, মানে একই স্কিমার বিপরীতে পরবর্তী যাচাইকরণে প্রায় কোনো পার্সিং ওভারহেড লাগে না। বেঞ্চমার্ক ধারাবাহিকভাবে দেখায় যে Ajv সাধারণ হার্ডওয়্যারে সাধারণ স্কিমার জন্য প্রতি সেকেন্ডে প্রায় দশ লাখ যাচাইকরণ প্রসেস করে। Ajv draft-07 থেকে draft 2020-12 পর্যন্ত সমর্থন করে এবং এটি Fastify-এর বিল্ট-ইন স্কিমা সমর্থনে, AWS CDK কনস্ট্রাক্ট লাইব্রেরিতে, এবং OpenAPI টুলিং ইকোসিস্টেমে এম্বেড করা যাচাইকরণ ইঞ্জিন। Ajv v8 থেকে শুরু করে, স্ট্রিক্ট মোড ডিফল্টভাবে সক্রিয় থাকে — এটি অজানা কীওয়ার্ড ধারণকারী স্কিমা, অস্পষ্ট exclusiveMinimum ব্যবহার, এবং প্রায়ই একটি ভুল নির্দেশ করে এমন প্যাটার্ন প্রত্যাখ্যান করে, যা প্রোডাকশনে একটি নীরবে ভাঙা স্কিমা পাঠানো উল্লেখযোগ্যভাবে কঠিন করে তোলে। UtiloKit JSON স্কিমা ভ্যালিডেটর ব্রাউজারে Ajv-তে এর UMD বিল্ডের মাধ্যমে চলে, তাই এখানে যাচাইকরণ ফলাফল ঠিক আপনার Ajv-চালিত ব্যাকএন্ড যা তৈরি করবে তার সাথে মেলে।
JSON স্কিমা যাচাইকরণ জাভাস্ক্রিপ্টে সীমাবদ্ধ নয়। Python ডেভেলপাররা jsonschema লাইব্রেরি ব্যবহার করেন (Julian Berman দ্বারা রক্ষণাবেক্ষিত), যা draft 3 থেকে 2020-12 পর্যন্ত সমর্থন করে এবং FastAPI-এর ডেটা যাচাইকরণ স্তরের সাথে পরিষ্কারভাবে সংযুক্ত হয়। Java-তে দুটি প্রধান বাস্তবায়ন আছে: everit-org/json-schema এবং networknt/json-schema-validator, পরেরটি বেশি সক্রিয়ভাবে রক্ষণাবেক্ষিত এবং enterprise Spring Boot সেবায় ব্যবহৃত draft 2020-12 সম্মত অপশন। Go ডেভেলপাররা qri-io/jsonschema এবং xeipuuv/gojsonschema ব্যবহার করেন। .NET-এ Newtonsoft.Json.Schema এবং নতুন JsonSchema.Net আছে। প্রতিটি ভাষা বাস্তবায়নে সামান্য আচরণগত পার্থক্য রয়েছে — বিশেষত ঐচ্ছিক format কীওয়ার্ড ও এরর মেসেজ গঠনের চারপাশে — যা কেন আপনার প্রোডাকশন স্ট্যাক যে নির্দিষ্ট ভ্যালিডেটর লাইব্রেরি ব্যবহার করে তার বিপরীতে স্কিমা পরীক্ষা করা আচরণ নিশ্চিত করার একমাত্র নির্ভরযোগ্য উপায়।
রানটাইম যাচাইকরণের বাইরে JSON স্কিমা ডেভেলপার টুলিংয়ের একটি গুরুত্বপূর্ণ অংশও হয়ে উঠেছে। VS Code এবং অন্যান্য এডিটর টাইপ করার সাথে সাথে রিয়েল-টাইম IntelliSense, অটোকমপ্লিশন, এবং ইনলাইন এরর হাইলাইটিং সরবরাহ করতে package.json, tsconfig.json, GitHub Actions ওয়ার্কফ্লো ফাইল, এবং AWS CDK আউটপুটের মতো ফাইলে $schema ফিল্ড পড়ে। OpenAPI 3.0 রিকোয়েস্ট ও রেসপন্স সংজ্ঞার জন্য একটি JSON স্কিমা সাবসেট ব্যবহার করে — OpenAPI Schema Object বলা হয়; OpenAPI 3.1 draft 2020-12-এর সাথে সম্পূর্ণভাবে সামঞ্জস্যপূর্ণ। Dredd, Spectral, এবং Pact-এর মতো API কনট্র্যাক্ট টেস্টিং টুল লাইভ API রেসপন্স ডকুমেন্ট করা কনট্র্যাক্ট মেনে চলে কিনা তা নিশ্চিত করতে JSON স্কিমা ব্যবহার করে, স্বয়ংক্রিয়ভাবে CI-তে রিগ্রেশন ধরে। TypeScript কোড জেনারেশন টুল যেমন quicktype এবং json-schema-to-typescript একটি JSON স্কিমা থেকে TypeScript ইন্টারফেস সংজ্ঞা তৈরি করে, একক সত্যের উৎস থেকে রানটাইম যাচাইকরণ ও কম্পাইল-টাইম টাইপ সিঙ্কে রাখে। এমনকি ডেটাবেস ইঞ্জিনও এই ফরম্যাট গ্রহণ করেছে: PostgreSQL 14+ একটি JSON স্কিমা এক্সপ্রেশনের বিপরীতে jsonb কলাম যাচাই করতে পারে, এবং MongoDB কালেকশন-স্তরের স্কিমা যাচাইকরণের জন্য একটি MongoDB-ফ্লেভারড JSON স্কিমা ডায়ালেক্ট বাস্তবায়ন করে — মানে আপনি এখানে যে স্কিমা শব্দভান্ডার পরীক্ষা করেন তা পুরো স্ট্যাক জুড়ে প্রবাহিত হয়, IDE অটোকমপ্লিট থেকে API গেটওয়ে থেকে ডেটাবেস স্টোরেজ পর্যন্ত।
Frequently asked questions
JSON স্কিমা কী?
JSON স্কিমা হলো JSON ডকুমেন্ট টীকা ও যাচাই করার একটি ঘোষণামূলক শব্দভান্ডার। এটি একটি JSON ডকুমেন্ট যে প্রত্যাশিত গঠন, ডেটা টাইপ, এবং সীমাবদ্ধতা পূরণ করতে হবে তা সংজ্ঞায়িত করে। টিমগুলো এটি ব্যবহার করে API রিকোয়েস্ট ও রেসপন্স পেলোড প্রসেস করার আগে যাচাই করতে, কনফিগারেশন ফাইলের গঠন প্রয়োগ করতে, ডকুমেন্টেশন ও UI ফর্ম স্বয়ংক্রিয়ভাবে তৈরি করতে, এবং মাইক্রোসার্ভিস জুড়ে ডেটা সামঞ্জস্য নিশ্চিত করতে। OpenAPI 3.0 এবং 3.1 উভয়ই JSON স্কিমার ওপর তৈরি, যা এটিকে আজ ওয়েবের সবচেয়ে ব্যাপকভাবে স্থাপিত ডেটা যাচাইকরণ মানদণ্ড করে তোলে।
এই ভ্যালিডেটর কোন JSON স্কিমা ড্রাফট সমর্থন করে?
এই ভ্যালিডেটর JSON Schema Draft-07-এর মূল কীওয়ার্ড বাস্তবায়ন করে, Ajv (জাভাস্ক্রিপ্ট), jsonschema (Python), এবং Newtonsoft.Json (C#)-সহ সব প্রধান ভ্যালিডেটর লাইব্রেরিতে সবচেয়ে ব্যাপকভাবে সমর্থিত সংস্করণ। Draft-07 if/then/else শর্তসাপেক্ষ যাচাইকরণ, readOnly/writeOnly টীকা, এবং কনটেন্ট এনকোডিং কীওয়ার্ড চালু করেছে। Draft 2020-12 নতুনতম স্পেক কিন্তু শুধু প্রয়োজন হয় যদি আপনি OpenAPI 3.1 বা prefixItems টাপল সিনট্যাক্স ব্যবহার করেন। ২০২৬ সালের বেশিরভাগ বাস্তব-জগতের ব্যবহারের ক্ষেত্রে, Draft-07 আপনার প্রয়োজন সবকিছু কভার করে।
allOf, anyOf, এবং oneOf-এর মধ্যে পার্থক্য কী?
allOf ডেটাকে তালিকাভুক্ত প্রতিটি সাব-স্কিমার বিপরীতে বৈধ হওয়ার প্রয়োজন করে — এটি একটি লজিক্যাল AND-এর মতো কাজ করে। anyOf অন্তত একটি সাব-স্কিমার বিপরীতে বৈধতার প্রয়োজন করে — লজিক্যাল OR। oneOf ঠিক একটি সাব-স্কিমার বিপরীতে বৈধতার প্রয়োজন করে — লজিক্যাল XOR। এই কম্পোজিশন কীওয়ার্ডগুলো আপনাকে সহজ পুনরায়-ব্যবহারযোগ্য টুকরো থেকে জটিল যাচাইকরণ নিয়ম তৈরি করতে দেয় এবং OpenAPI স্পেসিফিকেশন কীভাবে রিকোয়েস্ট ও রেসপন্স বডি সংজ্ঞায়িত করে তার কেন্দ্রীয় বিষয়। jsonschema.net-এর মতো বেশিরভাগ অন্য অনলাইন ভ্যালিডেটর একটি ক্লিক-থ্রু UI প্রকাশ করে যা এই কম্পোজিশন কীওয়ার্ডগুলো অস্পষ্ট করে দেয় — এই টুল আপনাকে সরাসরি কাঁচা স্কিমা JSON লিখতে ও পরীক্ষা করতে দেয়।
আমি কীভাবে $ref দিয়ে একটি সাব-স্কিমা রেফারেন্স করব?
একটি টপ-লেভেল $defs অবজেক্টে (বা সামঞ্জস্যের জন্য পুরোনো definitions অবজেক্ট) পুনরায়-ব্যবহারযোগ্য স্কিমা সংজ্ঞায়িত করুন, তারপর 'ref': '#/$defs/SchemaName' দিয়ে তাদের রেফারেন্স করুন। এটি আপনার স্কিমাকে DRY ও পাঠযোগ্য রাখে। এই ভ্যালিডেটর শুধু স্থানীয় (একই-ডকুমেন্ট) $ref সমর্থন করে — বাহ্যিক ফাইল নির্দেশ করা রিমোট $ref URL ফেচ করা হয় না। বেশিরভাগ ব্যবহারিক স্কিমার জন্য, স্থানীয় $ref যথেষ্ট। Postman-এর মতো টুল রিমোট $ref সমর্থন করে কিন্তু একটি সম্পূর্ণ প্রজেক্ট সেটআপ ও অ্যাকাউন্ট লগইন প্রয়োজন করে; এই টুল কোনো কনফিগারেশন ছাড়াই তাৎক্ষণিকভাবে যাচাই করে।
additionalProperties: false কী করে?
এটি properties কীওয়ার্ডের অধীনে স্পষ্টভাবে তালিকাভুক্ত নয় এমন অবজেক্টের যেকোনো প্রপার্টি নিষিদ্ধ করে। এটি একটি বন্ধ স্কিমা তৈরি করে — কঠোর API কনট্র্যাক্টের জন্য খুবই উপযোগী যেখানে অপ্রত্যাশিত ফিল্ড একটি যাচাইকরণ ব্যর্থতা ঘটানো উচিত। আপনি অতিরিক্ত প্রপার্টি অনুমতি দিতে চাইলে কিন্তু শুধু যেগুলো আপনি জানেন সেগুলো যাচাই করতে চাইলে, additionalProperties বাদ দিন বা এটিকে true সেট করুন। এটি সবচেয়ে সাধারণ ভুলগুলোর একটি: স্কিমা আপডেট না করে আপনার ডেটায় একটি নতুন প্রপার্টি যোগ করলে, additionalProperties সঠিকভাবে সেট না হওয়া পর্যন্ত যাচাইকরণ ব্যর্থ হবে।
আমি কি অবজেক্টের অ্যারে যাচাই করতে পারি?
হ্যাঁ। type-কে 'array' সেট করুন এবং একটি items সাব-স্কিমা সরবরাহ করুন। অ্যারের প্রতিটি এলিমেন্ট সেই সাব-স্কিমার বিপরীতে যাচাই করা হবে। টাপল যাচাইকরণের জন্য — যেখানে প্রতিটি অবস্থানের নিজস্ব স্কিমা আছে — Draft-07-এ items-কে স্কিমার একটি অ্যারে সেট করুন (বা Draft 2020-12-এ prefixItems ব্যবহার করুন)। আপনি minItems, maxItems দিয়ে অ্যারে দৈর্ঘ্যও সীমাবদ্ধ করতে পারেন, এবং uniqueItems: true দিয়ে অনন্যতা প্রয়োগ করতে পারেন। এখানে অ্যারে যাচাইকরণ ঠিক একইভাবে আচরণ করে যেভাবে Node.js-এ Ajv এটি সামলায়, তাই আপনি এখানে যে স্কিমা পরীক্ষা করেন তা প্রোডাকশনেও একইভাবে আচরণ করবে।
JSON স্কিমায় if/then/else কী?
Draft-07-এ চালু করা শর্তসাপেক্ষ যাচাইকরণ: ডেটা if স্কিমার বিপরীতে বৈধ হলে, এটি অবশ্যই then স্কিমার বিপরীতেও বৈধ হতে হবে; নয়তো এটি অবশ্যই else স্কিমার বিপরীতে বৈধ হতে হবে। এটি ডুপ্লিকেট সীমাবদ্ধতাসহ anyOf ব্যবহার করার চেয়ে বেশি পাঠযোগ্য এবং এমন স্কিমার জন্য আদর্শ যেখানে একটি ফিল্ডের টাইপ অন্য একটি ফিল্ডের অনুমোদিত মান নির্ধারণ করে — উদাহরণস্বরূপ, একটি পেমেন্ট অবজেক্ট যেখানে creditCard টাইপ একটি cardNumber ফিল্ড প্রয়োজন করে যখন bankTransfer টাইপ পরিবর্তে একটি routingNumber ফিল্ড প্রয়োজন করে।
সবচেয়ে সাধারণ JSON স্কিমা যাচাইকরণ ত্রুটি কী?
সবচেয়ে সাধারণ ত্রুটিগুলো হলো: অনুপস্থিত প্রয়োজনীয় প্রপার্টি (required-এ তালিকাভুক্ত একটি ফিল্ড ডেটায় অনুপস্থিত), টাইপ অমিল (একটি ফিল্ড একটি স্ট্রিং যখন স্কিমা একটি নম্বর প্রত্যাশা করে), প্যাটার্ন লঙ্ঘন (একটি স্ট্রিং pattern কীওয়ার্ডে একটি রেজেক্স ব্যর্থ হয়), পরিসীমা লঙ্ঘন (একটি নম্বর minimum/maximum সীমার বাইরে), এবং অতিরিক্ত প্রপার্টি ত্রুটি (additionalProperties false থাকলে একটি অপ্রত্যাশিত ফিল্ড উপস্থিত)। এই ভ্যালিডেটর ব্যর্থ ডেটার সঠিক JSON পয়েন্টার পাথসহ প্রতিটি ত্রুটি রিপোর্ট করে, তাই আপনি কোন ফিল্ড সমস্যা তৈরি করেছে তা অনুমান না করে দ্রুত সমস্যাগুলো ঠিক করতে পারেন।
OpenAPI / Swagger-এ JSON স্কিমা কীভাবে ব্যবহৃত হয়?
OpenAPI 3.0 রিকোয়েস্ট বডি, রেসপন্স পেলোড, কোয়েরি প্যারামিটার, এবং হেডারের গঠন সংজ্ঞায়িত করতে JSON Schema Draft-07-এর একটি সুপারসেট ব্যবহার করে। OpenAPI 3.1 JSON Schema Draft 2020-12-এর সাথে সম্পূর্ণভাবে সামঞ্জস্যপূর্ণ। একটি OpenAPI স্পেসিফিকেশনে এম্বেড করার আগে স্কিমা প্রোটোটাইপ ও ডিবাগ করার জন্য এই টুলে স্কিমা লেখা একটি আদর্শ উপায়। Swagger Editor এবং Stoplight-এর মতো টুল আপনার সম্পূর্ণ OpenAPI ডকুমেন্ট যাচাই করে কিন্তু আপনাকে সম্পূর্ণ স্পেক প্রস্তুত রাখতে হয় — এই টুল আপনাকে একটি একক স্কিমা কম্পোনেন্ট আলাদাভাবে পরীক্ষা করতে দেয়, যা পুনরাবৃত্তিমূলক ডেভেলপমেন্টের জন্য অনেক দ্রুততর।
type: 'number' এবং type: 'integer'-এর মধ্যে পার্থক্য কী?
JSON স্কিমায়, 'number' যেকোনো সাংখ্যিক মান গ্রহণ করে — ইন্টিজার ও ফ্লোট (যেমন, ৪২ ও ৩.১৪ উভয়ই পাস হয়)। 'integer' শুধু পূর্ণ সংখ্যা গ্রহণ করে — ৪২ পাস হয় কিন্তু ৩.১৪ ব্যর্থ হয়। এমন একটি ফিল্ডের জন্য 'integer' ব্যবহার করুন যা একটি কাউন্ট, ID, বা ইনডেক্স হতে হবে যা কখনও একটি দশমিক অংশ থাকতে পারে না। এই পার্থক্যটি API কনট্র্যাক্টের জন্য গুরুত্বপূর্ণ: আপনার ব্যাকএন্ড একটি ফ্লোট হিসেবে একটি দাম সংরক্ষণ করে কিন্তু আপনার স্কিমা 'integer' প্রয়োজন করে, আপনি প্রথম ভাংশযুক্ত দামে প্রোডাকশনে একটি রানটাইম যাচাইকরণ ত্রুটি পাবেন।
আমি কি ইমেইল অ্যাড্রেস বা URL যাচাই করতে pattern ব্যবহার করতে পারি?
হ্যাঁ। pattern কীওয়ার্ড একটি রেগুলার এক্সপ্রেশন গ্রহণ করে এবং যাচাই করে যে স্ট্রিং এটির সাথে মেলে। ইমেইলের জন্য, '^[^@]+@[^@]+\.[^@]+$'-এর মতো একটি সহজ প্যাটার্ন স্পষ্ট ফরম্যাট ত্রুটি ধরে। আরও কঠোর যাচাইকরণের জন্য, JSON Schema Draft-07-এও 'email', 'uri', এবং 'date-time'-এর মতো মানসহ একটি format কীওয়ার্ড আছে, যদিও format যাচাইকরণ স্পেক অনুযায়ী ঐচ্ছিক এবং Ajv-এর মতো ভ্যালিডেটরে স্পষ্টভাবে সক্রিয় করতে হবে। কিছু অনলাইন ভ্যালিডেটর নীরবে format কীওয়ার্ড উপেক্ষা করে, এর বিপরীতে, এই টুল আপনাকে pattern ও format সীমাবদ্ধতা উভয় পরীক্ষা করতে দেয় যাতে আপনি ঠিক জানেন আপনার স্ট্যাকে কোনটির ওপর নির্ভর করবেন।
ভ্যালিডেট করার সময় ভ্যালিডেটর কেন আমার JSON প্রিটি-প্রিন্ট করে?
ভ্যালিডেটর আপনার JSON ইনপুট পার্স করে এবং পড়ার সুবিধার জন্য ২-স্পেস ইনডেন্টেশনসহ পুনরায় সিরিয়ালাইজ করে। এটি একটি দ্রুত JSON ফরম্যাটার হিসেবেও কাজ করে — পুনরায়-ফরম্যাটিং সফল হলে, আপনার JSON সিনট্যাক্টিকভাবে বৈধ। JSON পার্স করা না গেলে, স্কিমা যাচাইকরণ চেষ্টা করার আগে ভ্যালিডেটর একটি পার্স এরর রিপোর্ট করে। Ajv অভ্যন্তরীণভাবে একই পদ্ধতি ব্যবহার করে: প্রথমে পার্স, তারপর যাচাই। আপনার শুধু একটি JSON ডকুমেন্ট সিনট্যাক্টিকভাবে বৈধ কিনা তা পরীক্ষা করা প্রয়োজন হলে, পুনরায়-প্রিন্ট ধাপটিই আপনাকে বলে দেবে — কোনো স্কিমা প্রয়োজন হয় না।
JSON স্কিমা এবং TypeScript টাইপের মধ্যে পার্থক্য কী?
TypeScript টাইপ কম্পাইল টাইমে চেক করা হয় এবং রানটাইমে মুছে ফেলা হয়। JSON স্কিমা রানটাইমে প্রকৃত ডেটা মানের বিপরীতে যাচাই করা হয়, যা বাহ্যিক ইনপুট — API রেসপন্স, ব্যবহারকারী-জমা দেওয়া ডেটা, কনফিগ ফাইল — যাচাই করার জন্য অপরিহার্য যা TypeScript চেক করতে পারে না। json-schema-to-typescript এবং zod-এর মতো টুল একটি থেকে অন্যটি তৈরি করতে পারে, কিন্তু তারা একটি প্রোডাকশন সিস্টেমে পরিপূরক উদ্দেশ্যে কাজ করে। একটি সাধারণ প্যাটার্ন হলো আপনার API কনট্র্যাক্টের জন্য একটি JSON স্কিমা লেখা, এটি যাচাই করতে এই টুল ব্যবহার করা, এবং তারপর স্কিমা থেকে TypeScript টাইপ তৈরি করা যাতে আপনার কোড ও রানটাইম যাচাইকরণ সিঙ্কে থাকে।
এই ভ্যালিডেটর কি 'not' কীওয়ার্ড সমর্থন করে?
হ্যাঁ। 'not' কীওয়ার্ড একটি সাব-স্কিমার ফলাফল উল্টে দেয়: ডেটা not স্কিমার বিপরীতে বৈধ হলে, যাচাইকরণ ব্যর্থ হয়। এটি নির্দিষ্ট মান বাদ দেওয়ার জন্য উপযোগী (যেমন, স্ট্রিং 'admin' নিষিদ্ধ করতে not: { const: 'admin' }) বা একটি ইউনিয়ন থেকে একটি টাইপ বাদ দেওয়ার জন্য। 'not' কীওয়ার্ড কম্পোজিশন কীওয়ার্ডের সাথে সংমিশ্রণে কাজ করে — উদাহরণস্বরূপ, not + anyOf আপনাকে 'অবশ্যই একটি স্ট্রিং হতে হবে কিন্তু এই নির্দিষ্ট মানগুলোর একটি নয়' প্রকাশ করতে দেয়। এটি সম্পূর্ণভাবে সমর্থিত এবং Ajv-এর not কীওয়ার্ড বাস্তবায়নের মতোই আচরণ করে।
একটি স্ট্রিং একটি নির্দিষ্ট তারিখ ফরম্যাটের সাথে মেলে কিনা তা কীভাবে যাচাই করব?
মান 'date' (YYYY-MM-DD) বা 'date-time' (সময়সহ ISO 8601) দিয়ে format কীওয়ার্ড ব্যবহার করুন। বিকল্পভাবে, কঠোর প্রয়োগের জন্য '^\d{4}-\d{2}-\d{2}$'-এর মতো একটি রেজেক্সসহ pattern কীওয়ার্ড ব্যবহার করুন। format কীওয়ার্ড উদ্দেশ্য প্রকাশ করে কিন্তু কিছু ভ্যালিডেটরের এটি প্রকৃতপক্ষে প্রয়োগ করতে স্পষ্ট অপ্ট-ইন প্রয়োজন — pattern পদ্ধতি ভ্যালিডেটর সেটিং নির্বিশেষে প্রয়োগ নিশ্চিত করে। এই টুল আপনি এটি ব্যবহার করলে format যাচাইকরণ প্রয়োগ করে, ajv.options.formats = 'full' দিয়ে Ajv যা করবে তার একটি প্রকৃত প্রিভিউ আপনাকে দেয়।
এটি jsonschema.net এবং jsonschemavalidator.net-এর সাথে কীভাবে তুলনীয়?
jsonschema.net আপনাকে কাঁচা JSON লেখার বদলে একটি ভিজ্যুয়াল পয়েন্ট-এন্ড-ক্লিক UI দিয়ে আপনার স্কিমা তৈরি করতে বাধ্য করে — শেখার জন্য উপযোগী কিন্তু প্রকৃত কাজের জন্য ধীর। jsonschemavalidator.net Newtonsoft.Json দ্বারা চালিত এবং .NET-কেন্দ্রিক ফরম্যাটে ত্রুটি রিপোর্ট করে যা সবসময় জাভাস্ক্রিপ্ট আচরণের সাথে মেলে না। এই টুল একই Ajv লাইব্রেরিতে চলে যা বেশিরভাগ Node.js অ্যাপ্লিকেশনে ব্যবহৃত হয়, তাই এখানে আপনি যে যাচাইকরণ ফলাফল দেখেন তা ঠিক আপনার প্রোডাকশন ব্যাকএন্ড যা দেখবে তার সাথে মেলে — কোনো অ্যাকাউন্ট, আপলোড, বা ইনস্টল ছাড়াই।
Related tools
সব টুল দেখুনCSS মিনিফায়ার
কমেন্ট ও অপ্রয়োজনীয় হোয়াইটস্পেস সরিয়ে CSS ছোট করুন।
JSON Escape / Unescape
কাঁচা টেক্সটকে JSON-নিরাপদ স্ট্রিংয়ে escape করুন এবং আবার unescape করুন।
HTTP স্ট্যাটাস কোড
সহজ ভাষায় অর্থ সহ HTTP স্ট্যাটাস কোডের অনুসন্ধানযোগ্য রেফারেন্স।
Regex চিটশিট
regular expression টোকেন ও ফ্ল্যাগের অনুসন্ধানযোগ্য রেফারেন্স।
ASCII টেবিল
দশমিক, hex, অক্টাল ও বাইনারিতে অনুসন্ধানযোগ্য অক্ষর কোড।
PX থেকে REM কনভার্টার
একটি root font size-এর বিপরীতে px, rem, em ও pt-এর মধ্যে রূপান্তর করুন।