ใช้ minItems/maxItems ใน JSON schema แบบ collection
เพื่อให้ JSON schema แบบ collection ของคุณน่าเชื่อถือยิ่งขึ้น ให้ใช้ minItems และ maxItems เพื่อให้คุณไว้ใจ API ของตัวเองได้
{
"type": "array",
"minItems": 1,
"items": {
"$ref": "subscription_notification.json"
}
}
แทนที่จะเป็น
{
"type": "array",
"items": {
"$ref": "subscription_notification.json"
}
}
ถ้า API ของคุณคืน array ว่าง [] แบบหลังจะยังผ่านอยู่ถ้าคุณเขียน assertion ไว้ใน spec
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>
ทำความเข้าใจ array ใน JSON Schema
array ใน JSON Schema มีความสำคัญต่อการกำหนดโครงสร้างและข้อจำกัดของ array ในข้อมูล JSON โดย array ใน JSON คือชุดของค่าที่เรียงลำดับ และ JSON Schema สำหรับ array ใช้ระบุคุณลักษณะและข้อจำกัดของ array เหล่านี้ การใช้ JSON Schema กับ array ช่วยให้คุณตรวจสอบความยาว เนื้อหา และความไม่ซ้ำกันของ array ได้ เพื่อให้มั่นใจว่าข้อมูลเป็นไปตามรูปแบบที่คาดหวัง ซึ่งมีประโยชน์อย่างยิ่งเมื่อคุณต้องบังคับใช้กฎเฉพาะกับโครงสร้างข้อมูล เช่น กำหนดจำนวน item ที่ต้องมี หรือบังคับให้ item ทั้งหมดเป็นชนิดใดชนิดหนึ่ง
คีย์เวิร์ดสำหรับตรวจสอบ array
JSON Schema มีคีย์เวิร์ดสำหรับการตรวจสอบหลายตัวที่ใช้จำกัดขอบเขตของ array ได้ คีย์เวิร์ดเหล่านี้ประกอบด้วย:
- items: ระบุ schema ของแต่ละ item ใน array
- additionalItems: ระบุ schema ของ item เพิ่มเติมใน array ที่อยู่นอกเหนือจาก schema ของ items ตัวแรก
- minItems และ maxItems: ระบุจำนวน item ต่ำสุดและสูงสุดใน array
- uniqueItems: ระบุว่า item ใน array ต้องไม่ซ้ำกันหรือไม่
- contains: ระบุ schema ที่อย่างน้อยหนึ่ง item ใน array ต้องตรงตาม
- minContains และ maxContains: ระบุจำนวน item ต่ำสุดและสูงสุดใน array ที่ต้องตรงตาม schema ของ contains
คีย์เวิร์ดเหล่านี้ให้คุณกำหนดข้อจำกัดของ array ได้อย่างแม่นยำ เพื่อให้มั่นใจว่าข้อมูลตรงตามเกณฑ์ที่ต้องการ
จำกัดความยาวของ array
JSON Schema มีหลายวิธีในการจำกัดความยาวของ array คีย์เวิร์ด minItems และ maxItems ใช้ระบุจำนวน item ต่ำสุดและสูงสุดใน array ได้ ตัวอย่างเช่น: { "type": "array", "minItems": 2, "maxItems": 5 } schema นี้ระบุว่า array ต้องมีอย่างน้อย 2 item และไม่เกิน 5 item การใช้คีย์เวิร์ดเหล่านี้ช่วยให้มั่นใจว่าความยาวของ array อยู่ในช่วงที่ต้องการ ป้องกันปัญหาจากการมี item น้อยหรือมากเกินไป
Best practice สำหรับการตรวจสอบ array
เมื่อตรวจสอบ array ด้วย JSON Schema ควรใช้คีย์เวิร์ดสำหรับการตรวจสอบหลายตัวร่วมกันเพื่อให้มั่นใจว่า array ตรงตามข้อจำกัดที่ต้องการ ตัวอย่างเช่น คุณอาจใช้ items เพื่อระบุ schema ของแต่ละ item ใน array และใช้ minItems กับ maxItems เพื่อระบุจำนวน item ต่ำสุดและสูงสุดใน array
นอกจากนี้ ควรใช้คีย์เวิร์ด uniqueItems เพื่อบังคับให้ item ใน array ไม่ซ้ำกัน ถ้านั่นเป็นข้อกำหนดของข้อมูลคุณ การใช้คีย์เวิร์ดเหล่านี้ร่วมกันช่วยให้คุณสร้าง schema ที่แข็งแรงและตรวจสอบทั้งโครงสร้างและเนื้อหาของ array ได้อย่างละเอียด
ตัวอย่าง use case
นี่คือตัวอย่าง use case ของ array ใน JSON Schema:
- ตรวจสอบรายการ user ID: คุณอาจใช้ schema แบบนี้เพื่อตรวจสอบรายการ user ID:
{ "type": "array",
"items": {"type": "integer"},
"minItems": 1, "maxItems": 10 }
- ตรวจสอบรายการชื่อสินค้า: คุณอาจใช้ schema แบบนี้เพื่อตรวจสอบรายการชื่อสินค้า:
{ "type": "array", "items": {"type": "string"}, "minItems": 1, "maxItems": 5, "uniqueItems": true }
- ตรวจสอบรายการที่อยู่: คุณอาจใช้ schema แบบนี้เพื่อตรวจสอบรายการที่อยู่:
{ "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 สำหรับ array ไปใช้กับข้อมูลแบบต่าง ๆ เพื่อให้มั่นใจว่า array ตรงตามข้อจำกัดและข้อกำหนดที่ระบุไว้