Ana içeriğe geç

JSON Schema ile Veri Doğrulama ve Yapı Denetimi

**JSON Schema**, JSON veri yapısının biçimini tanımlamak ve doğrulamak için geliştirilmiş, kendisi de JSON formatında yazılan açık bir standarttır. Bir nevi XML'deki XSD şemalarının JSON dünyasındaki karşılığıdır.

JSON Schema Örneği

Aşağıda bir kullanıcının yaşının sayı olması gerektiğini ve adının zorunlu olduğunu denetleyen bir şema yer almaktadır:

\\`json

{

"$schema": "http://json-schema.org/draft-07/schema#",

"type": "object",

"properties": {

"name": { "type": "string" },

"age": { "type": "integer", "minimum": 18 }

},

"required": ["name"]

}

\\`

AJV Kütüphanesi

JavaScript dünyasında en hızlı ve yaygın olarak tercih edilen JSON Schema doğrulayıcısı **AJV (Another JSON Schema Validator)** kütüphanesidir. AJV, şemayı dinamik olarak optimize edilmiş JavaScript fonksiyonlarına derleyerek nanosaniyeler içinde doğrulama sonuçları üretebilir.

JSONFlow üzerinde Input Panel altına Şema panelini açarak verilerinizin şemalara uygunluğunu anlık olarak AJV motoru ile test edebilirsiniz.

Şema Tasarımına Nereden Başlanır?

Önce zorunlu alanları, temel veri tiplerini ve kabul edilen null davranışını belirleyin. Ardından sayı aralıkları, metin desenleri ve enum değerleri ekleyin. additionalProperties kararını bilinçli verin: false katı sözleşme sağlar ancak geriye uyumlu yeni alanları reddedebilir.

Hata Mesajlarını Kullanışlı Hale Getirme

Doğrulayıcı çıktısındaki instance path hatalı değerin, schema path ise ihlal edilen kuralın yerini gösterir. Kullanıcıya ham teknik mesaj yerine alan adı, beklenen tip ve örnek geçerli değer sunun. Birden fazla hatayı tek çalıştırmada toplamak düzeltme döngüsünü hızlandırır.

Sürümleme ve Test

Şemayı API koduyla birlikte sürümleyin. Geçerli ve geçersiz örneklerden oluşan test koleksiyonu hazırlayın. Yeni şema sürümünü yayınlamadan önce eski istemci payload'larını doğrulayarak kırıcı değişiklikleri tespit edin. Şema doğrulaması iş kurallarının tamamını kapsamaz; alanlar arası kurallar için ek uygulama kontrolü gerekebilir.