REST API'lerde gelen verilerin doğruluğunu sağlamak, hem güvenlik hem de veri bütünlüğü açısından kritik öneme sahiptir. Yanlış formatta veya beklenmeyen alanlarla gelen istekler, uygulamanızda hatalara yol açabilir. Bu noktada iki popüler araç öne çıkar: JSON Schema ve Joi. Peki hangisi daha uygun? İhtiyacınıza göre doğru seçimi yapmak için bu iki aracı karşılaştırıyoruz.
JSON Schema Nedir ve Nasıl Çalışır?
JSON Schema, JSON verilerinin yapısını tanımlamak için kullanılan bir spesifikasyondur. Genellikle OpenAPI gibi API dokümantasyon araçlarıyla birlikte kullanılır. Bir JSON şeması, beklenen alan türlerini, zorunlu alanları, minimum/maksimum değerleri ve daha karmaşık kısıtlamaları belirlemenize olanak tanır. Örneğin, bir kullanıcı kaydı için şöyle bir şema tanımlayabilirsiniz:
{
"type": "object",
"properties": {
"username": { "type": "string", "minLength": 3 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 18 }
},
"required": ["username", "email"]
}
Bu şema, gelen JSON verisinin bir nesne olmasını, username ve email alanlarının zorunlu olmasını, username'in en az 3 karakter, age'in ise en az 18 olmasını sağlar. JSON Schema, dil bağımsızdır ve birçok programlama dilinde kütüphaneler mevcuttur. Örneğin Node.js'de ajv kütüphanesi yaygın olarak kullanılır.
Joi Nedir ve Nasıl Çalışır?
Joi, özellikle Node.js ekosisteminde popüler olan bir doğrulama kütüphanesidir. Hafif ve esnek bir API sunar. Joi ile doğrulama kuralları zincirleme bir şekilde tanımlanır. Yukarıdaki örneği Joi ile şöyle yazabiliriz:
const Joi = require('joi');
const schema = Joi.object({
username: Joi.string().min(3).required(),
email: Joi.string().email().required(),
age: Joi.number().integer().min(18)
});
const { error, value } = schema.validate(req.body);
Joi, doğrudan JavaScript nesneleriyle çalışır ve hata mesajlarını özelleştirme, koşullu doğrulama gibi gelişmiş özellikler sunar. Ayrıca bağımlılık yönetimi (örneğin bir alanın değerine göre başka bir alanı zorunlu kılma) Joi'de daha kolaydır.
JSON Schema ve Joi Arasındaki Temel Farklar
İki araç arasında seçim yaparken aşağıdaki faktörleri göz önünde bulundurmalısınız:
| Özellik | JSON Schema | Joi |
|---|---|---|
| Dil Bağımsızlığı | Evet (standart) | Hayır (Node.js odaklı) |
| API Dokümantasyonu | OpenAPI ile doğal entegrasyon | Ayrı bir dökümantasyon aracı gerekir |
| Karmaşık Doğrulama | Ek uzantılar gerekebilir | Doğrudan destek (koşullu, özel mesajlar) |
| Performans | Genellikle daha hızlı (ajv) | Yeterli, ancak büyük şemalarda daha yavaş |
| Öğrenme Eğrisi | Orta (spesifikasyon bilgisi gerekir) | Düşük (sezgisel API) |
Hangi Durumda Hangisini Tercih Etmelisiniz?
JSON Schema'yi tercih edin
- API'nizi OpenAPI veya Swagger ile belgeliyorsanız, şemalarınızı tekrar kullanmak istersiniz.
- Birden fazla dilde (Python, Java, Go vb.) doğrulama yapmanız gerekiyorsa.
- Büyük ve karmaşık veri yapılarını doğrularken performans kritikse (ajv oldukça hızlıdır).
- Standartlara bağlı kalmak ve ekosistem araçlarıyla uyumluluk istiyorsanız.
Joi'yi tercih edin
- Yalnızca Node.js kullanıyorsanız ve hızlı prototipleme yapmak istiyorsanız.
- Koşullu doğrulama (örneğin,
if/thenmantığı) veya özel hata mesajları gibi gelişmiş özelliklere ihtiyacınız varsa. - Küçük veya orta ölçekli projelerde basit bir API arıyorsanız.
- Express.js gibi bir framework ile sıkı entegrasyon istiyorsanız (Joi middleware'leri mevcut).
Doğrulama Hatalarını Yönetme
Her iki araç da doğrulama başarısız olduğunda ayrıntılı hata mesajları döndürür. Bu hataları standart HTTP durum kodlarıyla birleştirerek kullanıcıya anlamlı yanıtlar vermek önemlidir. Örneğin, doğrulama hatası durumunda 400 Bad Request döndürmek yaygın bir pratiktir. Ayrıca, doğrulama kurallarınızı API güvenlik katmanınızla entegre ederek OAuth 2.0 akışlarında da kullanabilirsiniz.
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
- Gereğinden karmaşık şemalar: Doğrulama kurallarınızı basit tutun. Çok fazla iç içe geçmiş şema, bakımı zorlaştırır.
- Performans testi yapmamak: Özellikle yüksek trafikli API'lerde doğrulama kütüphanesinin performansını ölçün. ajv (JSON Schema) genellikle daha hızlıdır.
- Hata mesajlarını kullanıcıya açık vermek: Güvenlik açısından hassas bilgiler içerebileceğinden, hata mesajlarını sadeleştirin veya özelleştirin.
- Güncellemeleri takip etmemek: Her iki kütüphane de aktif olarak gelişiyor; yeni sürümlerde güvenlik yamaları ve performans iyileştirmeleri gelebilir.
Sonuç: JSON Schema ve Joi Birlikte Kullanılabilir mi?
Evet, bazı projelerde her iki aracı bir arada kullanmak mümkündür. Örneğin, OpenAPI ile API şeması tanımlarken JSON Schema kullanabilir, ardından sunucu tarafında Joi ile ek doğrulama yapabilirsiniz. Ancak bu, kod tekrarına yol açabilir. Genel öneri, projenizin ihtiyaçlarına göre bir tanesine odaklanmanızdır. Eğer backend ekibiniz Node.js kullanıyorsa ve hızlı geliştirme yapıyorsanız Joi ideal; çoklu dil desteği ve standartlara uyum gerekiyorsa JSON Schema daha iyi bir seçimdir.
Sık Sorulan Sorular
JSON Schema ve Joi arasındaki en önemli fark nedir?
JSON Schema dil bağımsız bir standarttır ve OpenAPI ile doğal uyumludur; Joi ise Node.js'e özgüdür ve daha esnek bir API sunar.
Hangi durumda JSON Schema yerine Joi kullanmalıyım?
Sadece Node.js kullanıyorsanız ve koşullu doğrulama, özel hata mesajları gibi gelişmiş özelliklere ihtiyacınız varsa Joi daha uygundur.
JSON Schema performans açısından Joi'den daha mı iyidir?
Genellikle evet, özellikle ajv kütüphanesi ile JSON Schema çok hızlıdır. Joi ise küçük ve orta ölçekli projelerde yeterli performans sunar.
OpenAPI ile JSON Schema zorunlu mudur?
OpenAPI şemaları JSON Schema temellidir, bu nedenle OpenAPI kullanıyorsanız JSON Schema kullanmanız doğal bir entegrasyon sağlar.
Joi ile JSON Schema'yı birlikte kullanabilir miyim?
Evet, mümkündür ancak kod tekrarına yol açabilir. Genellikle tek bir doğrulama aracına odaklanmak daha iyidir.






