JSON Schema คือวิธีอธิบายว่าโครงสร้างของเอกสาร JSON ควรเป็นอย่างไร โดยใช้เอกสาร JSON อีกฉบับหนึ่ง แทนที่จะตรวจสอบข้อมูลด้วยตนเองผ่านเงื่อนไขในโค้ด คุณสามารถอธิบายประเภทที่คาดหวัง ฟิลด์บังคับ และข้อจำกัดของค่าในเชิงประกาศ แล้วตรวจสอบข้อมูลโดยอัตโนมัติ
คีย์เวิร์ดหลักของ draft-07
type— ประเภทของค่าที่คาดหวัง (object, string, number, array ฯลฯ)required— รายการฟิลด์ของอ็อบเจกต์ที่ต้องมีอยู่properties— คำอธิบายสคีมาสำหรับแต่ละฟิลด์ของอ็อบเจกต์แยกกันenum— จำกัดค่าให้อยู่ในชุดตัวเลือกที่กำหนดpattern— ตรวจสอบสตริงด้วย regular expression เช่น รูปแบบเลขบัตรประชาชน
ตัวอย่าง: pattern สำหรับเลขบัตรประจำตัวประชาชนไทย
เลขบัตรประจำตัวประชาชนไทยมี 13 หลักเสมอ โดยหลักสุดท้ายเป็นเลขตรวจสอบ (checksum) ที่คำนวณจาก 12 หลักแรก สคีมาสำหรับฟิลด์ในระบบ KYC หรือแบบฟอร์มราชการอาจเขียนได้ว่า: "nationalId": {"type": "string", "pattern": "^\\d{13}$"} รูปแบบนี้ยังไม่ได้ตรวจว่าเลขตรวจสอบถูกต้องตามสูตรคำนวณจริงหรือไม่ — นั่นต้องใช้ตรรกะแยกต่างหาก — แต่ก็จับข้อผิดพลาดที่พบบ่อยได้ทันที เช่น เลขที่มีขีดคั่น (แบบที่พิมพ์บนบัตรจริง 1-2345-67890-12-3) หลุดเข้ามาโดยไม่ได้ตัดออกก่อน หรือจำนวนหลักไม่ครบ 13
ต่างจากการตรวจสอบไวยากรณ์อย่างไร
การตรวจสอบ JSON ทั่วไปจะเช็กแค่ว่าข้อความถูกต้องตามไวยากรณ์ — วงเล็บ เครื่องหมายคำพูด จุลภาคอยู่ในตำแหน่งที่ถูกต้อง JSON Schema ตรวจสอบมากกว่านั้นมาก: อ็อบเจกต์มีฟิลด์บังคับ email หรือไม่ ค่าของ age เป็นตัวเลขไม่ใช่สตริงหรือไม่ status อยู่ในรายการค่าที่อนุญาตหรือไม่
เหตุใดจึงจำเป็น
- ตรวจสอบว่าการตอบกลับของ API จากบุคคลที่สามตรงกับสัญญาที่บันทึกไว้
- ตรวจสอบไฟล์การตั้งค่าก่อนการปรับใช้เพื่อจับข้อผิดพลาดได้เร็วขึ้น
- บันทึกโครงสร้างข้อมูลที่คาดหวังในรูปแบบที่สามารถตรวจสอบได้อัตโนมัติทันที
additionalProperties: เพิ่มฟิลด์ส่วนเกินได้หรือไม่
โดยค่าเริ่มต้น JSON Schema อนุญาตให้ object มีฟิลด์ใดก็ได้เพิ่มเติมนอกเหนือจากที่ระบุใน properties — required และ properties เป็นเพียงการกำหนดขั้นต่ำ ไม่ใช่รายการที่ครบถ้วน หากต้องการห้ามฟิลด์ที่ไม่รู้จัก ต้องเพิ่ม "additionalProperties": false อย่างชัดเจน — หากไม่มีคำสั่งนี้ schema จะยัง "เปิด" อยู่