Penentu Struktur JSON

Masukkan skema dan dokumen, pilih drafnya, lalu alat validasi akan memeriksa dokumen terhadap setiap kata kunci yang digunakan dalam skema Anda, type, required, enum, oneOf, $ref, if/then/else, serta format khusus, dan melaporkan setiap pelanggaran dengan penunjuk bergaya JSONPath ke lokasi tepat yang bermasalah.

Cara memvalidasi berdasarkan skema

  1. 1

    Tempel skema

    Rancangan JSON Schema versi 04, 07, atau 2020-12. Kata kunci `$schema` (jika tersedia) akan secara otomatis memilih rancangan yang sesuai.

  2. 2

    Lampirkan dokumen

    JSON yang ingin Anda validasi harus merupakan JSON yang valid terlebih dahulu; kesalahan sintaksis akan ditampilkan sebelum evaluasi skema dilakukan.

  3. 3

    Verifikasi

    Setiap pelanggaran dilaporkan menggunakan pointer JSON (`/user/email`) serta kata kunci yang menyebabkan kegagalan (`format`, `required`, dll.).

  4. 4

    Perbaiki dan validasi kembali

    Ubah salah satu sisi dan pembaruan status akan langsung terlihat.

Kata kunci yang didukung

Inti: type, enum, const, multipleOf, maximum, minimum, exclusiveMaximum, exclusiveMinimum, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, maxContains, minContains, maxProperties, minProperties, required, dependentRequired.

Komposisi: allOf, anyOf, oneOf, not.

Alat aplikasi: properties, patternProperties, additionalProperties, items, prefixItems, contains, propertyNames.

Kondisional: if, then, else, dependentSchemas.

Referensi: $ref, $defs, $id, $anchor.

Format (dengan validasi jika diaktifkan): date-time, date, time, duration, email, hostname, ipv4, ipv6, uri, uuid, regex.

Hasil kesalahan

FAIL  /user/email        format            "not-an-email" is not a valid "email"
FAIL  /user/age          minimum           -3 is less than the minimum 0
FAIL  /orders/0/total    type              "42" is not of type "number"
FAIL  /                  required          missing required property "shippingAddress"

Setiap kesalahan mencantumkan jalur dan kata kunci yang gagal, sehingga mudah ditemukan di editor Anda.

Perbedaan draf yang signifikan

Kata Kunci Draf 04 Draf 07 Draf 2020-12
id vs $id id $id $id
exclusiveMaximum sebagai nilai bool Ya Angka Angka
Sintaks array items items items prefixItems
$ref mengizinkan saudara kandung Tidak Tidak Ya

Atur rancangan yang tepat; memvalidasi skema draft-04 dengan tanggal 2020-12 akan menyebabkan kesalahan interpretasi terhadap id serta sejumlah detail lainnya.

Alur kerja tipikal

  • Pengujian kontrak API: sebelum penerapan, jalankan skema OpenAPI yang telah dihasilkan atau diperbarui terhadap respons contoh nyata.
  • Penguatan konfigurasi: validasi setiap konfigurasi YAML/JSON dalam proses CI terhadap skema yang ditentukan sebelum dilakukan penggabungan.
  • Penerimaan data: segera menolak payload yang tidak sesuai dengan bentuk yang diharapkan, dengan pesan kesalahan yang jelas.

Kesalahan Umum

  • Melupakan penerapan format. Secara default, sebagian besar alat validasi menganggap format yang tidak dikenal hanya sebagai anotasi saja. Aktifkan validasi format ketat untuk benar-benar menolak email dan tanggal yang tidak valid.
  • Penggunaan berlebihan terhadap oneOf: Jika dua cabang dari oneOf tumpang tindih, dokumen akan gagal (hanya boleh sesuai dengan satu cabang secara tepat). Gunakan anyOf atau pola diskriminator.
  • Skema yang ketat dengan additionalProperties: false: Penambahan medan opsional baru akan menyebabkan perubahan signifikan (breaking change). Hindari penambahan tersebut kecuali Anda benar-benar memerlukan objek tertutup.

Pertanyaan yang Sering Diajukan

Ya. Rancangan 2020-12, 07, dan 04 semuanya didukung. Alat validasi membaca kata kunci $schema dari dokumen Anda untuk memilih yang tepat, atau beralih ke fitur pemilih dalam antarmuka pengguna (UI).

Format standar (email, date-time, uuid, ipv4, dll.) akan diverifikasi ketika opsi strict-format diaktifkan. Format khusus yang dideklarasikan dalam skema Anda hanya dianggap sebagai anotasi, kecuali jika Anda menyertakan ekspresi regex dengan format pattern.

Referensi internal (#/$defs/foo) diresolusi secara otomatis. Referensi HTTP eksternal tidak diambil secara otomatis sebagai langkah keamanan. Sebelumnya, masukkan referensi eksternal tersebut ke dalam kode langsung, atau gunakan alat khusus yang mendukung penyelesaian $ref dari jarak jauh.

Ya. Baik skema maupun dokumen tetap berada di lingkungan lokal. Konten yang dilekatkan tidak pernah diunggah, hal ini sangat aman untuk kontrak API internal dan data sensitif.

Alat Terkait

Alat ini tersedia dalam bahasa lain