OOZOU
ติดต่อเรา
กลับไปหน้า TIL
ruby on rails

ใช้ minItems/maxItems ใน JSON schema แบบ collection

13 ตุลาคม 2563

เพื่อให้ 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 ตรงตามข้อจำกัดและข้อกำหนดที่ระบุไว้

เพิ่มเติมเกี่ยวกับ ruby on rails

ruby on rails10 กุมภาพันธ์ 2565

ใช้ Pundit Policy จัดการ permitted parameters ทั้งค่า default และแยกราย action

ในการจัดการ permitted params คุณสามารถเพิ่ม permitted\attributes และ permitted\attributes\for\#{action} ใน policy ของคุณได้ เช่น

ruby on rails31 มกราคม 2565

ใช้ `requestSubmit` สำหรับการ submit form ร่วมกับ Turbo

Turbo คอยฟัง event submit ที่เกิดขึ้นบน form ดังนั้นให้ใช้ requestSubmit เสมอเมื่อจะ submit form ด้วย JS

ruby on rails19 มกราคม 2565

ให้ Rubocop และ ESLint ignore gem ที่ bundle ไว้ใน GitHub Actions

โปรเจกต์ Rails มักติดตั้ง gem ลงใน vendor directory ใน GitHub actions เพื่อให้ cache ไว้ใช้ในรอบถัด ๆ ไปได้

มีโปรเจกต์ในใจ?

เรายินดีรับฟังสิ่งที่คุณกำลังสร้าง

เริ่มต้นสนทนาhello@oozou.com
OOZOU Logo

กรุงเทพฯ · สิงคโปร์ · ฮ่องกง

X
Facebook
Instagram
LinkedIn

บริการ

  • พัฒนาเว็บ
  • เอเจนต์ AI และ Generative AI
  • พัฒนาแอปมือถือ
  • วิศวกรรมและวิเคราะห์ข้อมูล
  • UI/UX และการออกแบบผลิตภัณฑ์
  • การเปลี่ยนผ่านสู่ดิจิทัล

บริษัท

  • เกี่ยวกับเรา
  • ร่วมงานกับเรา
  • บล็อก
  • กรณีศึกษา
  • Today I Learned
  • ติดต่อเรา

เพิ่มเติม

  • อุตสาหกรรม
  • เครือข่ายพันธมิตร
© 2026 OOZOU สงวนลิขสิทธิ์
นโยบายความเป็นส่วนตัวจรรยาบรรณนโยบาย ABAC