JSON Toolkit

ما الذي يحله JSON Schema فعليًا

الخلاصة: Schema يحكم البنية والأنواع، لا المعنى التجاري. يمنع الحقول الناقصة والأنواع الخاطئة والقيم الخارجة عن النطاق، بينما تبقى قواعد مثل أن يكون المبلغ أكبر من صفر في الكود.

متوسطقراءة نحو 4 دقيقةنُشر في 2026-10-30حُدِّث في 2026-10-30
حدود ما يستطيع JSON Schema فرضه

الخلاصة: دع JSON Schema يفرض البنية والأنواع والنطاقات والتنسيقات، بينما تبقى قواعد ما بين الحقول وثوابت الأعمال والحالة الخارجية في الكود؛ وتبنّه لواجهات API العامة والحمولات المشتركة، لا لخدمة داخلية بخمسة حقول.

إنه يجيب عن سؤال «هل هذه البيانات مشكّلة بشكل صحيح»، لا «هل هذه البيانات منطقية».

ما يجيده

الاكتمال البنيوي. أي الحقول يجب أن توجد، وهل الزوائد مسموحة (required، additionalProperties).

الأنواع. port عددًا أم سلسلة نصية، وtags مصفوفة أم قيمة مفردة. هذا وحده يزيل كثيرًا من الكود الدفاعي في الأنظمة متعددة اللغات.

النطاقات. enum، وminimum/maximum، وطول السلاسل والمصفوفات.

التنسيقات. format للتواريخ والبريد الإلكتروني وURIs وUUIDs، مع مدققات تفرضها.

التداخل. كل مستوى من الكائنات والمصفوفات يحصل على قيوده الخاصة، وتحمل الأخطاء مسارًا دقيقًا.

التوثيق. الـSchema هو العقد. غيّر حقلًا فيُظهر الفرق نطاق التأثير. ويولّد أيضًا أنواعًا ونماذج، فيغذي تعريف واحد عدة مستهلكين.

ما لا يستطيع فعله

الترابط بين الحقول. يمكن التعبير عن «يجب أن تكون النهاية بعد البداية» بـif/then/else، لكن النتيجة أطول وأصعب قراءةً من ثلاثة أسطر من الكود.

ثوابت الأعمال. «لا يمكن أن يصير المخزون سالبًا» يعتمد على الحالة الخارجية. والـSchema يرى مستندًا واحدًا.

الدلالات. price: -100 يحقق {"type": "number"} تمامًا. أما كونه سعرًا قانونيًا فخارج معرفة الـSchema.

تقسيم عملي

الطبقة المسؤول
الصياغة: هل هو JSON صالح المحلل
البنية: الحقول والأنواع والنطاقات والتنسيقات JSON Schema
الدلالات: بين الحقول وقواعد العمل والحالة الخارجية كود التطبيق
السلامة: الحجم والعمق والمعدل البوابة / الوسيط

اجمع هذه الطبقات في مكان واحد فينمو Schema إلى مئات الأسطر بخمسة مستويات من if/then. وعند تلك النقطة يبدأ الناس بتجاوزه.

متى يستحق التبني

  • واجهات API العامة بمستهلكين غير معروفين
  • خدمات متعددة تقرأ الحمولة نفسها
  • أنظمة مدفوعة بالتهيئة يجب أن تفشل فيها الأخطاء الإملائية بسرعة
  • توليد الأنواع أو النماذج من العقد

أما لخدمة داخلية صغيرة بخمسة حقول وواجهة أمامية واحدة، فتُصان الفحوص المكتوبة يدويًا بسرعة أكبر. وإدخال Schema هناك عمل سلبي.

الأسئلة الشائعة

كيف أقرر هل أتبنى JSON Schema؟

وازن بين المستهلكين العامين، والخدمات المتعددة التي تقرأ الحمولة نفسها، والحاجة إلى توليد الأنواع أو النماذج. أما لخدمة داخلية صغيرة بخمسة حقول وواجهة أمامية واحدة، فتُصان الفحوص المكتوبة يدويًا بسرعة أكبر.

لماذا ينبغي أن تبقى قواعد ما بين الحقول في الكود؟

يمكن حشر «يجب أن تكون النهاية بعد البداية» في if/then/else، لكن النتيجة أطول وأصعب قراءةً من بضعة أسطر من الكود. كما أن الـSchema لا يرى الحالة الخارجية.

هل يجب أن يتحقق Schema من حجم الحمولة وعمق التداخل؟

لا. يصف الـSchema البنية، لا الحجم أو العمق؛ وتلك الحدود مكانها طبقة البوابة أو الوسيط.

قراءة إضافية