الملخص
- يفحص JSON Type Definition مثيلاً مقابل عقد بنيوي محدود قصداً؛ والقبول دليل على الشكل لا على صدق الادعاء أو سلطة صاحبه.
- تقلل ثمانية أشكال متنافية وسياسة محلية للحقول المجهولة ومؤشران للأخطاء مساحة التفسير الخفي بين التطبيقات.
- تبدأ بعد الفحص قرارات مستقلة حول الهوية والتفويض وقواعد المجال ومنع الإعادة والحفظ وإثبات النتيجة.
قد تصل رسالتان متطابقتان إلى الخدمة، إحداهما طلب حديث من صاحب صلاحية، والثانية نسخة التقطها مهاجم بالأمس. يراهما مخطط البنية بالطريقة نفسها. هذا لا يعني أن المخطط أخفق، بل يعني أن القرار طُلب من طبقة لم تر الوقائع التي تفصل الرسالتين.
يحدد RFC 8927 لغة JSON Type Definition، أو JTD، لمهمة أصغر: وصف الأشكال الشائعة، وتسهيل توليد الأنواع في لغات البرمجة، وتوحيد موضع الخطأ. تتعمد اللغة قلة التعبير حتى لا يضطر كل منفذ إلى ابتكار أسبقية أو معنى محلي.
ثمانية أشكال بلا أسبقية مبطنة
توجد ثمانية أشكال متنافية: empty وref وtype وenum وelements وproperties وvalues وdiscriminator. يقبل empty كل شيء. يعيد ref استخدام تعريف موجود في الجذر. تصف properties سجلاً، وتصف values خريطة، ويختار discriminator فرعاً بواسطة وسم نصي.
لا يجوز للمخطط أن يجمع شكلين ويترك للمكتبة اختيار الأسبق. ولا تظهر definitions إلا في الجذر، ولا يعيد فرع discriminator تعريف الوسم بنوع آخر. هذه القيود تحذف غموضاً صغيراً قبل أن يتحول إلى خلاف تشغيلي كبير.
الوثيقة Experimental صادرة ضمن Independent Stream؛ لا تمثل إجماع IETF وليست Standards Track. ويقاس نجاح التجربة بتطبيقات مستقلة متعددة تتبادل المعلومات فعلاً باستخدام JTD. رقم RFC ليس إثبات نشر أو توافق.
تستطيع CDDL التعبير عن قيود أوسع، ويستخدمها RFC نفسه لتعريف بناء JTD. عدم قدرة JTD على وصف نفسه نتيجة مقصودة لتضييق المجال، لا وعداً ناقصاً. هنا يظهر مبدأ Heng Lu للمواصفة الأولية الدنيا: ثبّت فقط ما يستطيع المشاركون تنفيذه على نحو مشترك.
المخطط الفارغ يمنح قبولاً بلا قيد
لا يرفض الشكل empty أي قيمة ولا يولد خطأ. لذلك لا تكفي عبارة «نجح JTD». يجب أن يرتبط الإيصال ببصمة الرسالة وبصمة المخطط وإصداره والمنفذ ونمط الفحص والامتدادات.
يحمل metadata توثيقاً أو تلميحات لمولد الشفرة أو أداة محلية، لكن الأطراف الأخرى ليست ملزمة بفهمه. إذا غيّر metadata سلوك الفحص، فلا يصبح ذلك قابلاً للنقل إلا باتفاق خارجي صريح. الاسم الرسمي للحقل لا يمنحه سلطة.
وفق طبقات الواقع عند Heng Lu، يصف النجاح علاقة جرى تنفيذها بين رسالة وعقد. لا يخلق هوية المرسل ولا الواقعة المذكورة في الرسالة.
فتح الخارج لا يفتح الداخل
يفصل properties بين الحقول المطلوبة والاختيارية، ويرفض غير المعلن افتراضياً. يسمح additionalProperties:true بالحقول الزائدة في ذلك الكائن وحده، ولا ينتقل إلى الكائنات المتداخلة.
يمكن بذلك فتح غلاف لبيانات توجيه مستقبلية مع إبقاء أمر مالي داخلي مغلقاً. تحويل القرار إلى مفتاح عام في مكتبة يمحو الحد الذي قصده صاحب المخطط. ينبغي للسجل تحديد المستوى الذي ظهر فيه الحقل والقاعدة التي قبلته أو رفضته.
التوافق المستقبلي قرار محلي، لا فضيلة مطلقة. فقد يتجاهل مستهلك قديم تعليمة جديدة تغيّر معنى الحدث. يحتفظ الطرف الذي يتحمل الخطر بقرار القبول في كل عمق.
مؤشرا موضع لا يصنعان حكماً
يحتوي الخطأ القياسي instancePath إلى القيمة المرفوضة وschemaPath إلى القاعدة التي رفضتها، وكلاهما JSON Pointer. يتيح الزوج إعادة بناء اصطدام البيانات بالعقد.
لكن ترتيب الأخطاء غير محدد. العنصر الأول ليس بالضرورة السبب أو الأخطر. كما أن المؤشر يحدد عنواناً داخل وثيقة ولا يحدد مالك القرار أو يمنح حق التصحيح. الأتمتة التي تصلح الحقل تحتاج سياسة أخرى معلنة وقابلة للتراجع.
الوقت الصحيح نحوياً قد يكون كاذباً
يدعم JTD القيم المنطقية والنصوص والأعداد العائمة والأعداد الصحيحة من 8 إلى 32 بت والطوابع الزمنية. يتبع الطابع RFC 3339 بالتقييد المستخدم في Atom. هذا يوحد الكتابة ولا يوثق الساعة أو وقوع الحدث.
حذف int64 وuint64 متعمد لأن بيئات JSON لا تحفظ كامل المجال بالدقة نفسها. يحدد I-JSON مجالاً أصغر قابلاً للتبادل. فضّل JTD حذف اسم جذاب على تقديم ضمان دقة زائف.
وبالمثل يختار discriminator فرعاً فقط. قد يفرض وسم account_deleted وجود معرف، لكنه لا يثبت الحذف. المصادقة والتفويض والقبول والكتابة الدائمة والقراءة اللاحقة إيصالات منفصلة.
المخطط نفسه قد يكون عبئاً عدائياً
قد تصنع المراجع دورات. يوصي RFC 8927 بكشفها وإيقافها عند فحص مخططات يقدمها المستخدم، وإلا قد يقع المنفذ الساذج في حلقة إنكار خدمة. ويسمح RFC 8259 بقيود على الحجم وعمق التداخل ودقة الأرقام.
يحتاج التشغيل إلى ميزانيات للبايتات والعمق وتوسيع المراجع وعدد الأخطاء والوقت، وإلى تصنيف مصدر المخطط: أثر موثوق أم إدخال مستأجر أم اعتماد بعيد. صحة JSON لا تساوي سلامة كلفة تنفيذه.
المصادر
- RFC 8927 — JSON Type Definition
- RFC 8259 — تنسيق تبادل JSON
- RFC 7493 — تنسيق I-JSON
- RFC 6901 — JSON Pointer
- RFC 3339 — التاريخ والوقت على الإنترنت
- RFC 4287 — تنسيق Atom
- RFC 8610 — Concise Data Definition Language
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
- Heng Lu — On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile
إحاطة الأعضاء
سياق أعمق للملف الشخصي
سجّل الدخول بمستوى العضوية المناسب لفتح الإحاطة الكاملة وملاحظات المصادر.
للدائرة الاستراتيجية فقط
الدائرة الاستراتيجية
مفتوح لجميع القراء. افتح إحاطات الملف الشخصي بعد الانضمام وتسجيل الدخول.
انضم إلى الدائرة الاستراتيجيةلأعضاء تحالف القيادات فقط
تحالف القيادات
لأصحاب الأصول الفكرية المؤهلين وللإدارة؛ سجّل الدخول للوصول إلى إحاطات التحالف.
انضم إلى تحالف القيادات
