JSON Schema: จากพื้นฐานสู่การใช้งานจริง
คีย์เวิร์ดมีมากมาย แต่มีเพียงสิบกว่าตัวที่ใช้ทุกวัน ทำให้ type/properties/required/$ref ถูกต้อง จัดการข้อความ error ให้ดี ก็ครอบคลุมแปดสิบเปอร์เซ็นต์ของกรณีจริง
อธิบายรูปร่างของข้อมูลด้วย JSON Schema เปลี่ยนข้อตกลงด้วยวาจาให้เป็นการตรวจสอบที่รันได้ และปล่อยให้มันขับเคลื่อน TypeScript type และการสร้างฟอร์มตามลำดับ
7 บทความคีย์เวิร์ดมีมากมาย แต่มีเพียงสิบกว่าตัวที่ใช้ทุกวัน ทำให้ type/properties/required/$ref ถูกต้อง จัดการข้อความ error ให้ดี ก็ครอบคลุมแปดสิบเปอร์เซ็นต์ของกรณีจริง
Type และ schema ต่างครอบคลุมคนละส่วน: หนึ่งตอน compile หนึ่งตอนรันไทม์ คำถามไม่ใช่ว่าจะเลือกอันไหน แต่จะทำให้ทั้งสองซิงก์กันโดยอัตโนมัติอย่างไร
schema ที่สร้างขึ้นมักบล็อกข้อมูลที่ถูกต้อง เรียนรู้ว่าทำไมตัวอย่างที่สมบูรณ์กว่าจึงให้ schema ที่แย่กว่า แล้วรู้กระบวนการ: การสุ่มหลายเรกคอร์ด การเติมความหมาย การชี้ error ให้ตรงจุด
$ref แก้ปัญหาการใช้ซ้ำ allOf และ oneOf แก้ปัญหาการประกอบ และการซ้อนทั้งสองเข้าด้วยกันคือจุดที่พัง ครอบคลุม $id, $defs, เงื่อนไข, การเรียกซ้ำ, bundling และการดีบัก
validator ปล่อย error ที่เครื่องอ่านได้; ผู้ใช้ต้องการรู้ว่าช่องกรอกไหนผิด ครอบคลุมอาร์เรย์ errors ของ Ajv, instancePath เทียบกับ schemaPath, การจัดกลุ่มและถ้อยคำ
การตรวจสอบผ่านไม่ได้แปลว่าข้อมูลสะอาด Pydantic โดยค่าเริ่มต้นเมินฟิลด์ที่ไม่รู้จัก, Zod ตัดทิ้ง, Ajv ปล่อยผ่าน — พารามิเตอร์ที่โมเดลมั่วและคีย์พิมพ์ผิดลอดผ่านอย่างเงียบงัน บทความนี้แสดงสามรูปแบบของการยอมรับอย่างเงียบและวิธีที่ครบถ้วน: ปิดออบเจ็กต์ ควบคุมการแปลงชนิด และรัดทุกระดับของการซ้อน
สคีมาไม่จบเมื่อเขียนเสร็จ — ที่ตรงนั้นคือจุดเริ่มเสื่อมสภาพ การพิมพ์ผิดหนึ่งจุดทำให้การตรวจสอบหย่อนลงอย่างเงียบ ๆ การรีแฟกเตอร์หนึ่งครั้งทำลาย fixture ทั้งหมด คู่มือนี้ถอดโครงการทดสอบสัญญาที่ทำได้จริง: fixture บวก ลบ และ snapshot, lint ตัวสคีมาเอง คอมไพล์ครั้งเดียวใช้ซ้ำ และสี่ประตู CI ที่เปลี่ยนสัญญาแตกเป็นบิลด์แดง