Panduan Lengkap JSON Schema (Draft 7)
JSON Schema adalah kontrak untuk data Anda: ia menyatakan properti mana yang harus ada, tipe apa yang dimiliki, dan nilai apa yang diizinkan. Panduan ini membahas keyword inti Draft 7 dengan contoh API dunia nyata.
Apa itu JSON Schema?
Sebuah JSON Schema sendiri merupakan dokumen JSON yang mendeskripsikan bentuk data JSON lainnya. Gunakan untuk memvalidasi payload API, mendokumentasikan format yang diharapkan, menghasilkan kode (TypeScript, Go), dan menangkap data buruk sebelum mencapai logika Anda.
Keyword inti
Keyword type membatasi nilai menjadi string, number, boolean, null, object, atau array. properties dan required mendeskripsikan bentuk object; items mendeskripsikan elemen array.
{
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "number", "minimum": 0, "maximum": 150 },
"email": { "type": "string", "format": "email" }
},
"required": ["name", "email"]
}Selain type: enum membatasi ke sekumpulan nilai tetap, const mengharuskan nilai yang persis, pattern mencocokkan regex, minLength/maxLength membatasi panjang string, dan additionalProperties: false melarang key yang tidak dikenal.
Schema API dunia nyata
Berikut schema untuk endpoint registrasi pengguna. Perhatikan bagaimana setiap batasan juga berfungsi sebagai dokumentasi, dan bagaimana required + additionalProperties: false membuat kontrak menjadi ketat.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"username": { "type": "string", "pattern": "^[a-zA-Z0-9_]{3,30}$" },
"email": { "type": "string", "format": "email" },
"password": { "type": "string", "minLength": 8 },
"acceptTerms": { "type": "boolean", "const": true }
},
"required": ["username", "email", "password", "acceptTerms"],
"additionalProperties": false
}Praktik terbaik
Selalu deklarasikan $schema agar validator mengetahui draft yang Anda tuju. Tambahkan field description — field ini akan menjadi dokumentasi API langsung. Utamakan format (email, uri) daripada regex buatan sendiri. Gunakan additionalProperties: false untuk API yang ketat, tetapi izinkan ketika ekstensibilitas penting. Hindari schema yang bertingkat terlalu dalam — pecah dengan $ref dan definitions.
FAQ
- Draft JSON Schema mana yang dibahas dalam panduan ini?
- Draft 7, versi yang paling banyak didukung. Mencakup type, properties, required, items, enum, const, minimum/maximum, minLength/maxLength, pattern, format, additionalProperties, minItems/maxItems, dan uniqueItems.
- Apakah TypeScript menggantikan JSON Schema?
- Tidak. Tipe TypeScript dihapus saat compile time dan tidak memberikan validasi runtime. Untuk payload API, gunakan JSON Schema (atau Zod) untuk memvalidasi saat runtime, dan secara opsional menghasilkan tipe TypeScript darinya.
- Apakah saya bisa membuat schema secara otomatis dari JSON?
- Bisa — inferensi schema dari data contoh, lalu perbaiki dengan menambahkan batasan (required, pattern, batas panjang). Pen-generate-an memberi Anda titik awal, bukan kontrak yang sudah jadi.
Artikel terkait
Apa itu JSON? Panduan Lengkap untuk Pemula →
JSON (JavaScript Object Notation) adalah format pertukaran data yang ringan, mudah dibaca manusia dan mudah diurai mesin. Pelajari sintaks, tipe data, dan struktur yang menjadi fondasi API modern.
Sejarah JSON: Dari Tahun 2000 hingga Menjadi Standar Industri →
Telusuri JSON dari ide Douglas Crockford tahun 2001, diadopsi oleh Yahoo, hingga menjadi standar ECMA-404 yang menggerakkan 90% API modern.
Contoh JSON dalam 7 Bahasa: JavaScript, Python, Go, Rust, PHP, Java, C# →
Contoh parsing dan serialisasi JSON siap produksi dalam tujuh bahasa — lengkap dengan penanganan error dan praktik terbaik.