OOZOU
تواصلوا معنا
العودة إلى TIL
ruby on rails

استخدام minItems وmaxItems في مخططات JSON للمجموعات

13 أكتوبر 2020

لجعل مخططات JSON الخاصة بالمجموعات أكثر موثوقية، استخدموا minItems وmaxItems حتى تثقوا بواجهة API الخاصة بكم.

{
  "type": "array",
  "minItems": 1,
  "items": {
    "$ref": "subscription_notification.json"
  }
}

بدلًا من

{
  "type": "array",
  "items": {
    "$ref": "subscription_notification.json"
  }
}

إذا أعادت واجهة API مصفوفة فارغة []، فسينجح المخطط الأخير عند التحقق منه في الاختبارات.

expect(response).to match_response_schema(:subscription_notifications)

لكن المخطط الأول لن ينجح

The property '#/' did not contain a minimum number of items 1 in schema

<https://json-schema.org/understanding-json-schema/reference/array.html>

فهم المصفوفات في JSON Schema

المصفوفات في JSON Schema أساسية لتحديد بنية المصفوفات وقيودها في بيانات JSON. المصفوفة في JSON مجموعة مرتبة من القيم، ويُستخدم مخطط المصفوفة في JSON Schema لتحديد خصائص هذه المصفوفات وقيودها. وباستخدامه يمكنكم التحقق من طول المصفوفة ومحتواها وتفرّد عناصرها، لضمان التزام البيانات بالصيغة المتوقعة. ويفيد ذلك بشكل خاص عندما تحتاجون إلى فرض قواعد محددة على بنية البيانات، مثل اشتراط عدد معيّن من العناصر أو التأكد من أن جميع العناصر من نوع محدد.

كلمات التحقق المفتاحية للمصفوفات

توفّر JSON Schema عدة كلمات مفتاحية للتحقق يمكن استخدامها لتقييد المصفوفات، ومنها:

  • items: تحدد المخطط الخاص بكل عنصر في المصفوفة.
  • additionalItems: تحدد المخطط الخاص بأي عناصر إضافية في المصفوفة بعد العناصر المشمولة بمخطط items الأول.
  • minItems وmaxItems: تحددان الحد الأدنى والحد الأقصى لعدد العناصر في المصفوفة.
  • uniqueItems: تحدد ما إذا كان يجب أن تكون عناصر المصفوفة فريدة.
  • contains: تحدد مخططًا يجب أن يطابقه عنصر واحد على الأقل في المصفوفة.
  • minContains وmaxContains: تحددان الحد الأدنى والحد الأقصى لعدد العناصر التي يجب أن تطابق مخطط contains.

تتيح لكم هذه الكلمات المفتاحية تحديد قيود دقيقة على المصفوفة، لضمان استيفاء البيانات للمعايير المطلوبة.

تقييد طول المصفوفة

توفّر JSON Schema عدة طرق لتقييد طول المصفوفة. يمكن استخدام الكلمتين المفتاحيتين minItems وmaxItems لتحديد الحد الأدنى والحد الأقصى لعدد العناصر في المصفوفة. على سبيل المثال: { "type": "array", "minItems": 2, "maxItems": 5 } يشترط هذا المخطط أن تحتوي المصفوفة على عنصرين على الأقل و5 عناصر على الأكثر. وباستخدام هذه الكلمات المفتاحية تضمنون أن يقع طول المصفوفة ضمن النطاق المطلوب، فتتجنبون مشكلات قلة العناصر أو كثرتها.

أفضل الممارسات للتحقق من المصفوفات

عند التحقق من المصفوفات باستخدام JSON Schema، يُستحسن الجمع بين عدة كلمات مفتاحية للتحقق لضمان استيفاء المصفوفة للقيود المطلوبة. على سبيل المثال، يمكنكم استخدام items لتحديد مخطط كل عنصر في المصفوفة، وminItems وmaxItems لتحديد الحد الأدنى والحد الأقصى لعدد العناصر.

ويُستحسن أيضًا استخدام الكلمة المفتاحية uniqueItems لضمان تفرّد عناصر المصفوفة، إن كان ذلك من متطلبات بياناتكم. وبالجمع بين هذه الكلمات المفتاحية، تبنون مخططًا متينًا يتحقق من بنية المصفوفة ومحتواها بشكل شامل.

أمثلة على حالات الاستخدام

إليكم بعض الأمثلة على حالات استخدام المصفوفات في JSON Schema:

  • التحقق من قائمة معرّفات المستخدمين: يمكنكم استخدام مخطط مثل هذا للتحقق من قائمة معرّفات المستخدمين:
{ "type": "array", 
"items": {"type": "integer"}, 
"minItems": 1, "maxItems": 10 } 
  • التحقق من قائمة أسماء المنتجات: يمكنكم استخدام مخطط مثل هذا للتحقق من قائمة أسماء المنتجات:
{ "type": "array", "items": {"type": "string"}, "minItems": 1, "maxItems": 5, "uniqueItems": true } 
  • التحقق من قائمة العناوين: يمكنكم استخدام مخطط مثل هذا للتحقق من قائمة العناوين:
{ "type": "array", "items": { "type": "object", "properties": { "street": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"} }, "required": ["street", "city", "state", "zip"] }, "minItems": 1, "maxItems": 10 } 

توضّح هذه الأمثلة كيفية تطبيق مصفوفات JSON Schema على أنواع مختلفة من البيانات، لضمان استيفاء المصفوفات للقيود والمتطلبات المحددة.

المزيد حول ruby on rails

ruby on rails10 فبراير 2022

استخدام سياسات Pundit لإدارة المعاملات المسموح بها افتراضيًا ولكل إجراء

لإدارة المعاملات المسموح بها، يمكنكم إضافة permitted_attributes وpermitted_attributes_for_#{action} في السياسات، على سبيل المثال:

ruby on rails31 يناير 2022

استخدام `requestSubmit` لإرسال النماذج مع Turbo

يستمع Turbo إلى أحداث submit على النموذج. لذلك استخدموا دائمًا requestSubmit لإرسال النموذج عبر JS.

ruby on rails19 يناير 2022

تجاهل الـ gems المجمّعة في Rubocop وESLint ضمن GitHub Actions

غالبًا ما تثبّت مشاريع Rails الـ gems في مجلد vendor ضمن GitHub Actions، كي نتمكن من تخزينها مؤقتًا للتشغيلات المتتالية.

هل لديكم فكرة مشروع؟

يسعدنا أن نتعرّف على ما تبنونه.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد