Skip to content
jsonforge.app
Kembali ke blog
Tutorial12 menit baca

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.

Schema object dengan field wajib dan batasan tipe.
json
{
  "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 registrasi pengguna, ketat secara bawaan.
json
{
  "$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

Deklarasikan $schema agar validator tahu draft yang Anda tuju. Tambahkan field description, karena editor dan dokumentasi API akan menampilkannya. Utamakan format (email, uri) daripada regex buatan sendiri. Gunakan additionalProperties: false untuk API yang ketat, dan biarkan terbuka saat ekstensibilitas penting. Jangan membuat schema 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. Simpulkan schema dari data contoh, lalu perbaiki dengan menambahkan batasan (required, pattern, batas panjang). Generator memberi Anda titik awal, dan Anda tetap harus menyelesaikan kontraknya.

Artikel terkait