{"id":42894,"date":"2026-06-28T09:01:15","date_gmt":"2026-06-28T06:01:15","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/"},"modified":"2026-06-28T09:02:00","modified_gmt":"2026-06-28T06:02:00","slug":"tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/","title":{"rendered":"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test"},"content":{"rendered":"<h2>Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test<\/h2>\n<p>Web uygulamalar\u0131nda veri tutarl\u0131l\u0131\u011f\u0131 ve do\u011frulu\u011fu, kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen kritik unsurlard\u0131r. Peki, karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 taray\u0131c\u0131 \u00fczerinde, herhangi bir sunucu iste\u011fi yapmadan, h\u0131zl\u0131 ve g\u00fcvenilir bir \u015fekilde nas\u0131l do\u011frulayabiliriz? Bu makalede, tam da bu soruna odaklanarak, taray\u0131c\u0131 tabanl\u0131 bir JSON Schema do\u011frulay\u0131c\u0131 geli\u015ftirme s\u00fcrecini, kulland\u0131\u011f\u0131 temel teknolojileri ve kar\u015f\u0131la\u015ft\u0131\u011f\u0131 zorluklar\u0131 detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z. \u00d6zellikle JSON Schema&#8217;n\u0131n Draft-07 standard\u0131, referans mekanizmas\u0131 olan <code>$ref<\/code>, mant\u0131ksal birle\u015ftiriciler <code>allOf<\/code>, <code>anyOf<\/code>, <code>oneOf<\/code> ve ko\u015fullu do\u011frulama sa\u011flayan <code>if\/then\/else<\/code> gibi geli\u015fmi\u015f \u00f6zelliklerini ele alacak ve bu \u00f6zelliklerin implementasyonunu 173 adet kapsaml\u0131 test ile nas\u0131l g\u00fcvence alt\u0131na ald\u0131\u011f\u0131m\u0131z\u0131 a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn dinamik web geli\u015ftirme ortam\u0131nda, istemci taraf\u0131nda veri do\u011frulama yapmak hem performans\u0131 art\u0131r\u0131r hem de sunucu y\u00fck\u00fcn\u00fc azalt\u0131r. Kullan\u0131c\u0131lar\u0131n girdilerini an\u0131nda geri bildirimle y\u00f6nlendirmek, hatal\u0131 veri g\u00f6nderimini engeller ve genel uygulama g\u00fcvenilirli\u011fini y\u00fckseltir. Ancak, JSON verilerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve JSON Schema&#8217;n\u0131n sundu\u011fu zengin do\u011frulama yetenekleri, taray\u0131c\u0131 ortam\u0131nda bu do\u011frulamay\u0131 ger\u00e7ekle\u015ftirmeyi teknik olarak zorlu bir g\u00f6rev haline getirebilir. Bu projede, bu zorluklar\u0131n \u00fcstesinden gelerek, tam \u00f6zellikli ve performans\u0131 optimize edilmi\u015f bir taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131 ortaya koyduk.<\/p>\n<p>Bu do\u011frulay\u0131c\u0131, \u00f6zellikle mikroservis mimarilerinde, API gateway&#8217;lerde veya do\u011frudan istemci taraf\u0131nda veri modellerini do\u011frulamas\u0131 gereken senaryolar i\u00e7in idealdir. Geli\u015ftiriciler, karma\u015f\u0131k veri s\u00f6zle\u015fmelerini kolayca y\u00f6netebilir ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc en ba\u015f\u0131ndan sa\u011flayabilirler. Projenin temelinde yatan motivasyon, a\u00e7\u0131k kaynakl\u0131 ve ba\u011f\u0131ms\u0131z bir \u00e7\u00f6z\u00fcm sunarak JSON Schema ekosistemine katk\u0131da bulunmakt\u0131r.<\/p>\n<p>Makalenin ilerleyen b\u00f6l\u00fcmlerinde, JSON Schema&#8217;n\u0131n temel kavramlar\u0131ndan ba\u015flayarak, do\u011frulay\u0131c\u0131m\u0131z\u0131n mimarisine, uygulanan \u00f6zelliklere ve kar\u015f\u0131la\u015f\u0131lan teknik detaylara derinlemesine dalaca\u011f\u0131z. Amac\u0131m\u0131z, okuyucunun bu konuyu s\u0131f\u0131rdan anlayabilmesini sa\u011flamak ve kendi projelerinde benzer \u00e7\u00f6z\u00fcmler geli\u015ftirmeleri i\u00e7in ilham vermektir.<\/p>\n<h2>Neden Taray\u0131c\u0131 Tabanl\u0131 Bir JSON Schema Do\u011frulay\u0131c\u0131?<\/h2>\n<p>Taray\u0131c\u0131 tabanl\u0131 bir JSON Schema do\u011frulay\u0131c\u0131 kullanman\u0131n bir\u00e7ok pratik avantaj\u0131 bulunmaktad\u0131r. \u00d6ncelikle, performans a\u00e7\u0131s\u0131ndan \u00f6nemli bir kazan\u00e7 sa\u011flar. Veri do\u011frulamas\u0131, istemci taraf\u0131nda ger\u00e7ekle\u015fti\u011fi i\u00e7in, sunucuya gereksiz a\u011f istekleri g\u00f6nderilmez. Bu, \u00f6zellikle y\u00fcksek trafikli uygulamalarda sunucu \u00fczerindeki y\u00fck\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve yan\u0131t s\u00fcrelerini iyile\u015ftirir. Kullan\u0131c\u0131lar, hatal\u0131 veri girdiklerinde an\u0131nda geri bildirim al\u0131rlar, bu da kullan\u0131c\u0131 deneyimini iyile\u015ftirir ve veri giri\u015f s\u00fcrecini daha ak\u0131c\u0131 hale getirir.<\/p>\n<p>G\u00fcvenlik de \u00f6nemli bir fakt\u00f6rd\u00fcr. \u0130stemci taraf\u0131nda yap\u0131lan ilk do\u011frulama katman\u0131, k\u00f6t\u00fc niyetli veya hatal\u0131 verilerin sunucuya ula\u015fmas\u0131n\u0131 engellemeye yard\u0131mc\u0131 olur. Bu, sunucu taraf\u0131ndaki g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azaltmaya ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumaya katk\u0131da bulunur. \u00d6rne\u011fin, bir kullan\u0131c\u0131 kay\u0131t formunda, e-posta adresi format\u0131n\u0131n veya \u015fifre karma\u015f\u0131kl\u0131\u011f\u0131n\u0131n taray\u0131c\u0131da do\u011frulanmas\u0131, sunucuya g\u00f6nderilecek verinin kalitesini ba\u015ftan garanti eder.<\/p>\n<p>Geli\u015ftirme kolayl\u0131\u011f\u0131 a\u00e7\u0131s\u0131ndan bak\u0131ld\u0131\u011f\u0131nda, taray\u0131c\u0131 tabanl\u0131 do\u011frulay\u0131c\u0131lar, geli\u015ftiricilerin veri modellerini ve API s\u00f6zle\u015fmelerini yerel olarak test etmelerini sa\u011flar. Bu, geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc h\u0131zland\u0131r\u0131r ve hata ay\u0131klama s\u00fcrecini basitle\u015ftirir. Bir JSON Schema dosyas\u0131 ve do\u011frulanacak bir JSON verisi ile, geli\u015ftiriciler herhangi bir ek altyap\u0131 kurmadan an\u0131nda sonu\u00e7lar\u0131 g\u00f6rebilirler. Bu, \u00f6zellikle prototipleme a\u015famas\u0131nda veya API etkile\u015fimlerini test ederken b\u00fcy\u00fck bir kolayl\u0131k sunar.<\/p>\n<p>Yerel depolama (local storage) veya taray\u0131c\u0131 \u00f6nbelle\u011fi gibi istemci taraf\u0131 depolama \u00e7\u00f6z\u00fcmlerine kaydedilen verilerin do\u011frulanmas\u0131 da taray\u0131c\u0131 tabanl\u0131 do\u011frulay\u0131c\u0131lar sayesinde kolayla\u015f\u0131r. Bu, uygulaman\u0131n \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma yeteneklerini geli\u015ftirirken veri tutarl\u0131l\u0131\u011f\u0131n\u0131 da s\u00fcrd\u00fcrmeye yard\u0131mc\u0131 olur. \u00d6rne\u011fin, bir al\u0131\u015fveri\u015f sepeti verisinin yerel olarak saklan\u0131p daha sonra do\u011frulanmas\u0131, kullan\u0131c\u0131n\u0131n \u00e7evrimd\u0131\u015f\u0131 deneyimini zenginle\u015ftirir.<\/p>\n<p>Son olarak, a\u00e7\u0131k kaynakl\u0131 ve ba\u011f\u0131ms\u0131z bir taray\u0131c\u0131 tabanl\u0131 do\u011frulay\u0131c\u0131, farkl\u0131 projelerde kolayca entegre edilebilir ve \u00f6zelle\u015ftirilebilir. Bu, belirli proje gereksinimlerine uyum sa\u011flama esnekli\u011fi sunar. Bu makalede geli\u015ftirilen do\u011frulay\u0131c\u0131, bu avantajlar\u0131 en \u00fcst d\u00fczeye \u00e7\u0131karmay\u0131 hedeflemektedir.<\/p>\n<h2>JSON Schema Temelleri ve Draft-07 Standard\u0131<\/h2>\n<p>JSON Schema, JSON verilerinin yap\u0131s\u0131n\u0131, t\u00fcr\u00fcn\u00fc ve k\u0131s\u0131tlamalar\u0131n\u0131 tan\u0131mlamak i\u00e7in kullan\u0131lan bir dildir. Temel olarak, bir JSON belgesinin ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131 belirlemek i\u00e7in bir \u015fema tan\u0131mlar. Bu, verilerinizi yap\u0131land\u0131rmak, do\u011frulamak ve belgelemek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. JSON Schema&#8217;n\u0131n farkl\u0131 s\u00fcr\u00fcmleri (versiyonlar\u0131) bulunmaktad\u0131r ve her biri yeni \u00f6zellikler ve iyile\u015ftirmeler sunar. Bizim projemizde odakland\u0131\u011f\u0131m\u0131z s\u00fcr\u00fcm, JSON Schema&#8217;n\u0131n olduk\u00e7a yayg\u0131n ve g\u00fc\u00e7l\u00fc bir versiyonu olan Draft-07&#8217;dir.<\/p>\n<p>Draft-07, \u00f6nceki s\u00fcr\u00fcmlere g\u00f6re \u00f6nemli geli\u015ftirmeler getirmi\u015ftir. Bunlardan en \u00f6nemlileri aras\u0131nda, <code>if\/then\/else<\/code> gibi ko\u015fullu do\u011frulama mekanizmalar\u0131n\u0131n eklenmesi yer al\u0131r. Bu, belirli ko\u015fullar kar\u015f\u0131land\u0131\u011f\u0131nda farkl\u0131 do\u011frulama kurallar\u0131n\u0131n uygulanmas\u0131na olanak tan\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n &#8220;meslek&#8221; alan\u0131 doluysa, ek olarak &#8220;\u015firket&#8221; alan\u0131 da zorunlu olabilir. Bu t\u00fcr karma\u015f\u0131k mant\u0131klar, <code>if\/then\/else<\/code> ile kolayca ifade edilebilir.<\/p>\n<p>JSON Schema&#8217;n\u0131n temel yap\u0131 ta\u015flar\u0131 aras\u0131nda \u015funlar bulunur:<\/p>\n<ul>\n<li><code>type<\/code>: Verinin beklenen t\u00fcr\u00fcn\u00fc belirtir (\u00f6rn: &#8220;string&#8221;, &#8220;number&#8221;, &#8220;object&#8221;, &#8220;array&#8221;, &#8220;boolean&#8221;, &#8220;null&#8221;).<\/li>\n<li><code>properties<\/code>: Bir nesnenin (object) i\u00e7indeki anahtar-de\u011fer \u00e7iftlerinin tan\u0131mlanmas\u0131n\u0131 sa\u011flar. Her anahtar i\u00e7in ayr\u0131 bir \u015fema tan\u0131mlanabilir.<\/li>\n<li><code>required<\/code>: Bir nesne i\u00e7in hangi anahtarlar\u0131n zorunlu oldu\u011funu belirtir.<\/li>\n<li><code>items<\/code>: Bir dizinin (array) elemanlar\u0131n\u0131n \u015femas\u0131n\u0131 tan\u0131mlar. Tek bir \u015fema ile t\u00fcm elemanlar do\u011frulanabilir veya bir dizi \u015fema ile farkl\u0131 pozisyonlardaki elemanlar i\u00e7in farkl\u0131 kurallar belirlenebilir.<\/li>\n<li><code>minLength<\/code>, <code>maxLength<\/code>: Bir dizinin veya metin dizesinin minimum ve maksimum uzunlu\u011funu belirler.<\/li>\n<li><code>minimum<\/code>, <code>maximum<\/code>: Say\u0131sal de\u011ferler i\u00e7in minimum ve maksimum s\u0131n\u0131rlar\u0131 belirler.<\/li>\n<li><code>pattern<\/code>: Metin dizilerinin belirli bir d\u00fczenli ifadeye (regular expression) uyup uymad\u0131\u011f\u0131n\u0131 kontrol eder.<\/li>\n<li><code>enum<\/code>: Bir de\u011ferin, belirtilen bir listedeki de\u011ferlerden biri olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/li>\n<\/ul>\n<p>Draft-07 ile gelen daha geli\u015fmi\u015f kavramlar aras\u0131nda ise \u015funlar yer al\u0131r:<\/p>\n<ul>\n<li><code>$ref<\/code>: Bu mekanizma, \u015feman\u0131n ba\u015fka bir b\u00f6l\u00fcm\u00fcne veya tamamen farkl\u0131 bir JSON Schema dosyas\u0131na referans vermesini sa\u011flar. Bu, \u015femalar\u0131 mod\u00fcler hale getirmeyi ve tekrar kullan\u0131labilirli\u011fi art\u0131rmay\u0131 kolayla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir &#8220;adres&#8221; \u015femas\u0131n\u0131 birden fazla yerde tan\u0131mlamak yerine, bir kere tan\u0131mlay\u0131p <code>$ref<\/code> ile \u00e7a\u011f\u0131rabilirsiniz.<\/li>\n<li><code>allOf<\/code>: Belirtilen t\u00fcm \u015femalar\u0131n ge\u00e7erli olmas\u0131 gerekti\u011fini belirtir. Bir JSON verisi, <code>allOf<\/code> i\u00e7inde listelenen t\u00fcm \u015femalar\u0131n gereksinimlerini kar\u015f\u0131lamal\u0131d\u0131r.<\/li>\n<li><code>anyOf<\/code>: Belirtilen \u015femalardan en az birinin ge\u00e7erli olmas\u0131 gerekti\u011fini belirtir.<\/li>\n<li><code>oneOf<\/code>: Belirtilen \u015femalardan tam olarak birinin ge\u00e7erli olmas\u0131 gerekti\u011fini belirtir.<\/li>\n<li><code>if\/then\/else<\/code>: Ko\u015fullu do\u011frulama i\u00e7in kullan\u0131l\u0131r. <code>if<\/code> blo\u011fundaki \u015fema ge\u00e7erliyse, <code>then<\/code> blo\u011fundaki \u015fema uygulan\u0131r. E\u011fer <code>if<\/code> ge\u00e7erli de\u011filse ve <code>else<\/code> blo\u011fu varsa, <code>else<\/code> blo\u011fundaki \u015fema uygulan\u0131r.<\/li>\n<\/ul>\n<p>Bu \u00f6zellikler, karma\u015f\u0131k ve dinamik veri yap\u0131lar\u0131n\u0131 tan\u0131mlamak i\u00e7in inan\u0131lmaz bir esneklik sa\u011flar. Projemizde, bu \u00f6zelliklerin tamam\u0131n\u0131 taray\u0131c\u0131 ortam\u0131nda hatas\u0131z bir \u015fekilde \u00e7al\u0131\u015ft\u0131rmak temel hedeflerimizden biriydi.<\/p>\n<h2>Taray\u0131c\u0131 Tabanl\u0131 Do\u011frulay\u0131c\u0131n\u0131n Mimari Yakla\u015f\u0131m\u0131<\/h2>\n<p>Taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131m\u0131z\u0131 geli\u015ftirirken, performans, mod\u00fclerlik ve geni\u015fletilebilirlik \u00f6nceliklerimiz aras\u0131ndayd\u0131. Projenin temelinde, JavaScript dilini kullanarak, standart web teknolojileriyle uyumlu bir \u00e7\u00f6z\u00fcm olu\u015fturma fikri yatt\u0131. Do\u011frulay\u0131c\u0131m\u0131z\u0131n mimarisi, \u00e7ekirdek bir do\u011frulama motoru ve bu motoru kullanan bir API&#8217;den olu\u015fmaktad\u0131r.<\/p>\n<p><strong>\u00c7ekirdek Do\u011frulama Motoru:<\/strong> Bu motor, JSON Schema spesifikasyonunu yorumlar ve verilen JSON verisinin bu \u015femaya uyup uymad\u0131\u011f\u0131n\u0131 belirler. Motorun en \u00f6nemli g\u00f6revlerinden biri, JSON Schema&#8217;n\u0131n farkl\u0131 anahtar kelimelerini (keywords) do\u011fru bir \u015fekilde i\u015fleyebilmektir. Bu, her bir anahtar kelime i\u00e7in \u00f6zel bir do\u011frulama fonksiyonu yazmay\u0131 gerektirir. \u00d6rne\u011fin, <code>type<\/code> anahtar kelimesi i\u00e7in bir fonksiyon, verinin beklenen t\u00fcre uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol ederken, <code>pattern<\/code> anahtar kelimesi i\u00e7in bir fonksiyon, metin verisinin belirli bir d\u00fczenli ifadeye uyup uymad\u0131\u011f\u0131n\u0131 kontrol eder.<\/p>\n<p>Motorun karma\u015f\u0131k yap\u0131s\u0131, \u00f6zellikle <code>$ref<\/code>, <code>allOf<\/code>, <code>anyOf<\/code>, <code>oneOf<\/code> ve <code>if\/then\/else<\/code> gibi \u00f6zelliklerin i\u015flenmesinde kendini g\u00f6sterir. <code>$ref<\/code> mekanizmas\u0131n\u0131 \u00e7\u00f6zmek i\u00e7in, \u015fema i\u00e7indeki referanslar\u0131n do\u011fru bir \u015fekilde bulunup \u00e7\u00f6z\u00fcmlenmesi gerekir. Bu, genellikle bir referans \u00e7\u00f6z\u00fcmleyici (resolver) mod\u00fcl\u00fc ile yap\u0131l\u0131r. <code>allOf<\/code>, <code>anyOf<\/code> ve <code>oneOf<\/code> gibi mant\u0131ksal birle\u015ftiriciler, birden fazla \u015fema \u00fczerinde karma\u015f\u0131k mant\u0131k y\u00fcr\u00fctmeyi gerektirir. Bu, \u00f6zyinelemeli (recursive) fonksiyonlar ve dikkatli durum y\u00f6netimi ile ba\u015far\u0131l\u0131r.<\/p>\n<p><strong>API Katman\u0131:<\/strong> \u00c7ekirdek do\u011frulama motoru, do\u011frudan kullan\u0131c\u0131n\u0131n eri\u015febilece\u011fi bir JavaScript API arac\u0131l\u0131\u011f\u0131yla sunulur. Bu API, \u015fema ve veri nesnelerini al\u0131r, do\u011frulama motorunu \u00e7al\u0131\u015ft\u0131r\u0131r ve sonu\u00e7lar\u0131 anla\u015f\u0131l\u0131r bir formatta d\u00f6nd\u00fcr\u00fcr. API, do\u011frulama i\u015fleminin ba\u015flat\u0131lmas\u0131, \u015femalar\u0131n y\u00fcklenmesi ve olas\u0131 hatalar\u0131n y\u00f6netilmesi gibi i\u015flevleri \u00fcstlenir.<\/p>\n<p>Mimariyi tasarlarken, a\u015fa\u011f\u0131daki prensiplere dikkat ettik:<\/p>\n<ul>\n<li><strong>Mod\u00fclerlik:<\/strong> Her bir JSON Schema anahtar kelimesi veya \u00f6zelli\u011fi, ba\u011f\u0131ms\u0131z bir mod\u00fcl olarak geli\u015ftirilebilir. Bu, kodun anla\u015f\u0131lmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r, bak\u0131m\u0131 basitle\u015ftirir ve yeni \u00f6zelliklerin eklenmesini h\u0131zland\u0131r\u0131r.<\/li>\n<li><strong>Performans Optimizasyonu:<\/strong> Taray\u0131c\u0131 ortam\u0131nda \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in performans kritik \u00f6neme sahiptir. B\u00fcy\u00fck JSON verilerini veya karma\u015f\u0131k \u015femalar\u0131 i\u015flerken bile h\u0131zl\u0131 yan\u0131t s\u00fcreleri elde etmek hedeflendi. Bu, algoritmalar\u0131n verimli se\u00e7imi ve gereksiz hesaplamalardan ka\u00e7\u0131nma yoluyla ba\u015far\u0131l\u0131r.<\/li>\n<li><strong>Geni\u015fletilebilirlik:<\/strong> Gelecekte JSON Schema&#8217;n\u0131n yeni s\u00fcr\u00fcmleri veya \u00f6zel uzant\u0131lar (extensions) eklenebilir. Mimari, bu t\u00fcr geni\u015flemelere izin verecek \u015fekilde esnek tasarlanm\u0131\u015ft\u0131r.<\/li>\n<li><strong>Hata Y\u00f6netimi:<\/strong> Do\u011frulama s\u00fcreci s\u0131ras\u0131nda ortaya \u00e7\u0131kabilecek hatalar (ge\u00e7ersiz \u015fema, ge\u00e7ersiz veri vb.) a\u00e7\u0131k ve bilgilendirici bir \u015fekilde raporlan\u0131r.<\/li>\n<\/ul>\n<p>Bu mimari yakla\u015f\u0131m, hem teknik olarak sa\u011flam hem de kullan\u0131c\u0131 dostu bir taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flam\u0131\u015ft\u0131r.<\/p>\n<h2>Draft-07&#8217;nin \u0130leri D\u00fczey \u00d6zelliklerinin Uygulanmas\u0131<\/h2>\n<p>JSON Schema&#8217;n\u0131n Draft-07 standard\u0131, veri do\u011frulama konusunda inan\u0131lmaz bir esneklik sunan g\u00fc\u00e7l\u00fc \u00f6zelliklere sahiptir. Projemizde bu \u00f6zelliklerin her birini dikkatlice ele ald\u0131k ve taray\u0131c\u0131 ortam\u0131nda verimli bir \u015fekilde \u00e7al\u0131\u015fmalar\u0131n\u0131 sa\u011flad\u0131k. \u00d6zellikle <code>$ref<\/code>, <code>allOf<\/code>, <code>anyOf<\/code>, <code>oneOf<\/code> ve <code>if\/then\/else<\/code> gibi \u00f6zellikler, karma\u015f\u0131k veri modellerini tan\u0131mlamak i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h3>$ref: Referans Mekanizmas\u0131n\u0131n \u00c7\u00f6z\u00fcmlenmesi<\/h3>\n<p><code>$ref<\/code> anahtar kelimesi, \u015feman\u0131n ba\u015fka bir k\u0131sm\u0131na veya harici bir JSON dosyas\u0131na referans vermesini sa\u011flar. Bu, \u015femalar\u0131 mod\u00fcler hale getirmenin ve tekrar kullan\u0131labilirli\u011fi art\u0131rman\u0131n en etkili yollar\u0131ndan biridir. \u00d6rne\u011fin, bir &#8220;kullan\u0131c\u0131&#8221; \u015femas\u0131nda bir &#8220;adres&#8221; nesnesi kullanmak istedi\u011fimizde, &#8220;adres&#8221; \u015femas\u0131n\u0131 bir kere tan\u0131mlay\u0131p, kullan\u0131c\u0131 \u015femas\u0131nda <code>$ref: \"#\/definitions\/address\"<\/code> \u015feklinde referans verebiliriz. Taray\u0131c\u0131 tabanl\u0131 do\u011frulay\u0131c\u0131m\u0131zda, <code>$ref<\/code>&#8216;leri \u00e7\u00f6zmek i\u00e7in bir referans \u00e7\u00f6z\u00fcmleyici (resolver) mod\u00fcl\u00fc geli\u015ftirdik. Bu mod\u00fcl, \u015fema i\u00e7indeki t\u00fcm <code>$ref<\/code> yollar\u0131n\u0131 takip eder, ilgili \u015fema par\u00e7ac\u0131klar\u0131n\u0131 bulur ve bunlar\u0131 do\u011fru ba\u011flamda (context) birle\u015ftirir. Bu, \u00f6zyinelemeli (recursive) \u015fema yap\u0131lar\u0131n\u0131 ve harici dosya referanslar\u0131n\u0131 da destekler.<\/p>\n<p><strong>Vaka Analizi:<\/strong> Bir e-ticaret uygulamas\u0131nda \u00fcr\u00fcn bilgilerini do\u011frulad\u0131\u011f\u0131m\u0131z\u0131 d\u00fc\u015f\u00fcnelim. \u00dcr\u00fcn \u015femas\u0131, &#8220;fiyat&#8221;, &#8220;stok&#8221; ve &#8220;\u00f6zellikler&#8221; gibi alanlar i\u00e7erebilir. &#8220;\u00d6zellikler&#8221; alan\u0131, \u00fcr\u00fcn t\u00fcr\u00fcne g\u00f6re de\u011fi\u015febilir (\u00f6rn: elektronik \u00fcr\u00fcnler i\u00e7in &#8220;ekran boyutu&#8221;, giyim \u00fcr\u00fcnleri i\u00e7in &#8220;beden&#8221;). Bu durumda, farkl\u0131 \u00fcr\u00fcn t\u00fcrleri i\u00e7in ayr\u0131 &#8220;\u00f6zellikler&#8221; \u015femalar\u0131 tan\u0131mlayabilir ve ana \u00fcr\u00fcn \u015femas\u0131nda <code>$ref<\/code> ile bu \u015femalara referans verebiliriz. Bu, \u015fema y\u00f6netimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir.<\/p>\n<h3>Mant\u0131ksal Birle\u015ftiriciler: allOf, anyOf, oneOf<\/h3>\n<p>Bu \u00fc\u00e7 anahtar kelime, birden fazla \u015femay\u0131 birle\u015ftirerek daha karma\u015f\u0131k do\u011frulama kurallar\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flar:<\/p>\n<ul>\n<li><strong><code>allOf<\/code>:<\/strong> Bir JSON verisinin, <code>allOf<\/code> i\u00e7inde belirtilen t\u00fcm \u015femalar\u0131n gereksinimlerini kar\u015f\u0131lamas\u0131 gerekir. Bu, birden fazla k\u0131s\u0131tlamay\u0131 tek bir veri \u00fczerinde birle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131 nesnesinin hem &#8220;ad&#8221; ve &#8220;soyad&#8221; alanlar\u0131na sahip olmas\u0131 hem de belirli bir ya\u015f s\u0131n\u0131r\u0131n\u0131 kar\u015f\u0131lamas\u0131 gerekiyorsa, <code>allOf<\/code> kullan\u0131labilir.<\/li>\n<li><strong><code>anyOf<\/code>:<\/strong> Bir JSON verisinin, <code>anyOf<\/code> i\u00e7inde belirtilen \u015femalardan en az birinin gereksinimlerini kar\u015f\u0131lamas\u0131 yeterlidir. Bu, se\u00e7enekli alanlar veya farkl\u0131 veri yap\u0131lar\u0131 i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131 ya &#8220;email&#8221; ya da &#8220;telefon numaras\u0131&#8221; ile kay\u0131t olabilir.<\/li>\n<li><strong><code>oneOf<\/code>:<\/strong> Bir JSON verisinin, <code>oneOf<\/code> i\u00e7inde belirtilen \u015femalardan tam olarak birinin gereksinimlerini kar\u015f\u0131lamas\u0131 gerekir. Bu, kar\u015f\u0131l\u0131kl\u0131 olarak birbirini d\u0131\u015flayan se\u00e7enekler i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir \u00f6deme y\u00f6ntemi ya &#8220;kredi kart\u0131&#8221; bilgileri i\u00e7ermeli ya da &#8220;banka havalesi&#8221; bilgileri i\u00e7ermeli, ikisi birden olmamal\u0131d\u0131r.<\/li>\n<\/ul>\n<p>Bu birle\u015ftiricilerin implementasyonu, \u00f6zyinelemeli (recursive) do\u011frulama algoritmalar\u0131 gerektirir. Her bir alt \u015fema, ana \u015fema ba\u011flam\u0131nda do\u011frulan\u0131r ve sonu\u00e7lar birle\u015ftirilir.<\/p>\n<p><strong>Vaka Analizi:<\/strong> Bir API iste\u011fi i\u00e7in veri yap\u0131s\u0131n\u0131 do\u011frulad\u0131\u011f\u0131m\u0131z\u0131 varsayal\u0131m. \u0130ste\u011fin t\u00fcr\u00fcne g\u00f6re farkl\u0131 veri y\u00fckleri (payload) olabilir. \u00d6rne\u011fin, &#8220;sipari\u015f olu\u015fturma&#8221; iste\u011fi bir &#8220;sipari\u015f detaylar\u0131&#8221; nesnesi i\u00e7ermeli, &#8220;\u00fcr\u00fcn g\u00fcncelleme&#8221; iste\u011fi ise &#8220;\u00fcr\u00fcn ID&#8221; ve &#8220;yeni de\u011ferler&#8221; i\u00e7ermelidir. Bu durumu <code>oneOf<\/code> ile modelleyerek, iste\u011fin t\u00fcr\u00fcne g\u00f6re do\u011fru veri yap\u0131s\u0131n\u0131n kullan\u0131lmas\u0131n\u0131 sa\u011flayabiliriz.<\/p>\n<h3>if\/then\/else: Ko\u015fullu Do\u011frulama<\/h3>\n<p><code>if\/then\/else<\/code> anahtar kelimesi, JSON Schema&#8217;ya programatik bir yap\u0131 kazand\u0131r\u0131r. Belirli bir ko\u015ful (<code>if<\/code> \u015femas\u0131) do\u011fruysa, <code>then<\/code> \u015femas\u0131ndaki kurallar uygulan\u0131r. E\u011fer ko\u015ful yanl\u0131\u015fsa ve bir <code>else<\/code> \u015femas\u0131 varsa, <code>else<\/code> \u015femas\u0131ndaki kurallar uygulan\u0131r. Bu, verinin i\u00e7eri\u011fine ba\u011fl\u0131 olarak farkl\u0131 do\u011frulama kurallar\u0131n\u0131n uygulanmas\u0131na olanak tan\u0131r.<\/p>\n<p><strong>Vaka Analizi:<\/strong> Bir kullan\u0131c\u0131 profili g\u00fcncelleme formunda, kullan\u0131c\u0131n\u0131n &#8220;profil resmi y\u00fckleyip y\u00fcklemedi\u011fine&#8221; ba\u011fl\u0131 olarak farkl\u0131 alanlar\u0131n zorunlu olmas\u0131n\u0131 isteyebiliriz. E\u011fer kullan\u0131c\u0131 profil resmi y\u00fcklemi\u015fse (<code>if<\/code> \u015femas\u0131), &#8220;resim a\u00e7\u0131klamas\u0131&#8221; alan\u0131 zorunlu hale gelir (<code>then<\/code> \u015femas\u0131). E\u011fer y\u00fcklememi\u015fse (<code>else<\/code> \u015femas\u0131), bu alan zorunlu olmaz.<\/p>\n<p>Bu ileri d\u00fczey \u00f6zelliklerin her biri, dikkatli bir planlama ve titiz bir implementasyon gerektirir. Projemizde, bu \u00f6zelliklerin do\u011fru ve g\u00fcvenilir bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in kapsaml\u0131 test senaryolar\u0131 geli\u015ftirdik.<\/p>\n<h2>173 Kapsaml\u0131 Test ile G\u00fcvenilirlik<\/h2>\n<p>Herhangi bir yaz\u0131l\u0131m geli\u015ftirme projesinde, \u00f6zellikle de temel bir i\u015flevi yerine getiren bir do\u011frulay\u0131c\u0131da, testler hayati \u00f6neme sahiptir. Taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131m\u0131z\u0131n g\u00fcvenilirli\u011fini ve do\u011frulu\u011funu sa\u011flamak amac\u0131yla, toplamda 173 adet kapsaml\u0131 test senaryosu olu\u015fturduk. Bu testler, JSON Schema spesifikasyonunun farkl\u0131 y\u00f6nlerini, Draft-07&#8217;nin t\u00fcm \u00f6zelliklerini ve olas\u0131 kenar durumlar\u0131n\u0131 (edge cases) kapsamaktad\u0131r.<\/p>\n<p>Test setimiz a\u015fa\u011f\u0131daki kategorilere ayr\u0131lm\u0131\u015ft\u0131r:<\/p>\n<ul>\n<li><strong>Temel T\u00fcr Do\u011frulamalar\u0131:<\/strong> String, number, integer, boolean, null gibi temel veri t\u00fcrlerinin do\u011fru \u015fekilde do\u011frulanmas\u0131n\u0131 test eder.<\/li>\n<li><strong>Format Do\u011frulamalar\u0131:<\/strong> &#8220;email&#8221;, &#8220;uri&#8221;, &#8220;date-time&#8221;, &#8220;ipv4&#8221;, &#8220;ipv6&#8221; gibi \u00f6nceden tan\u0131mlanm\u0131\u015f formatlar\u0131n do\u011frulu\u011funu kontrol eder.<\/li>\n<li><strong>Dizi (Array) Do\u011frulamalar\u0131:<\/strong> <code>items<\/code>, <code>minItems<\/code>, <code>maxItems<\/code>, <code>uniqueItems<\/code> gibi dizi ile ilgili t\u00fcm \u00f6zellikleri test eder.<\/li>\n<li><strong>Nesne (Object) Do\u011frulamalar\u0131:<\/strong> <code>properties<\/code>, <code>required<\/code>, <code>additionalProperties<\/code>, <code>minProperties<\/code>, <code>maxProperties<\/code> gibi nesne ile ilgili t\u00fcm \u00f6zellikleri kapsar.<\/li>\n<li><strong>Karakter ve Say\u0131 K\u0131s\u0131tlamalar\u0131:<\/strong> <code>minLength<\/code>, <code>maxLength<\/code>, <code>pattern<\/code>, <code>minimum<\/code>, <code>maximum<\/code>, <code>exclusiveMinimum<\/code>, <code>exclusiveMaximum<\/code> gibi metin ve say\u0131 k\u0131s\u0131tlamalar\u0131n\u0131 test eder.<\/li>\n<li><strong>Mant\u0131ksal Birle\u015ftiriciler:<\/strong> <code>allOf<\/code>, <code>anyOf<\/code>, <code>oneOf<\/code> \u00f6zelliklerinin do\u011fru \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in \u00f6zel testler yaz\u0131lm\u0131\u015ft\u0131r. Bu testler, farkl\u0131 \u015femalar\u0131n birle\u015fimlerinin beklendi\u011fi gibi davran\u0131p davranmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/li>\n<li><strong>Ko\u015fullu Do\u011frulama:<\/strong> <code>if\/then\/else<\/code> yap\u0131s\u0131n\u0131n t\u00fcm olas\u0131 senaryolar\u0131n\u0131 (<code>if<\/code> do\u011fru\/yanl\u0131\u015f, <code>else<\/code> var\/yok) test eder.<\/li>\n<li><strong>Referans Mekanizmas\u0131:<\/strong> <code>$ref<\/code>&#8216;in yerel (internal) ve harici (external) referanslar\u0131, \u00f6zyinelemeli \u015femalar\u0131 do\u011fru bir \u015fekilde \u00e7\u00f6z\u00fcmledi\u011fini do\u011frulamak i\u00e7in testler i\u00e7erir.<\/li>\n<li><strong>Hata Durumlar\u0131 ve Kenar Durumlar\u0131:<\/strong> Ge\u00e7ersiz \u015fema tan\u0131mlar\u0131, bo\u015f veriler, beklenmeyen veri t\u00fcrleri gibi hata durumlar\u0131n\u0131 ve \u00f6zel durumlar\u0131 kapsayan testler, do\u011frulay\u0131c\u0131m\u0131z\u0131n sa\u011flaml\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Her test senaryosu, belirli bir JSON Schema ve bir JSON veri \u00e7iftinden olu\u015fur. Testin beklenen sonucu (ge\u00e7erli veya ge\u00e7ersiz) \u00f6nceden tan\u0131mlan\u0131r. Testler \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, do\u011frulay\u0131c\u0131n\u0131n \u00e7\u0131kt\u0131s\u0131 beklenen sonu\u00e7la kar\u015f\u0131la\u015ft\u0131r\u0131l\u0131r. Herhangi bir uyumsuzluk, bir hata olarak i\u015faretlenir ve geli\u015ftirme ekibi taraf\u0131ndan incelenir.<\/p>\n<p>Bu 173 adet test, sadece temel i\u015flevselli\u011fi de\u011fil, ayn\u0131 zamanda JSON Schema spesifikasyonunun karma\u015f\u0131k ve n\u00fcansl\u0131 y\u00f6nlerini de kapsayarak, do\u011frulay\u0131c\u0131m\u0131z\u0131n geni\u015f bir kullan\u0131m alan\u0131 i\u00e7in g\u00fcvenilir olmas\u0131n\u0131 sa\u011flar. Bu testlerin otomatikle\u015ftirilmi\u015f bir test ortam\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131, her kod de\u011fi\u015fikli\u011finde do\u011frulay\u0131c\u0131n\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 garanti alt\u0131na al\u0131r.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve Vaka Analizleri<\/h2>\n<p>Taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131m\u0131z, \u00e7e\u015fitli ger\u00e7ek d\u00fcnya senaryolar\u0131nda de\u011ferli bir ara\u00e7 haline gelmektedir. \u0130\u015fte birka\u00e7 \u00f6rnek vaka analizi:<\/p>\n<h3>Vaka Analizi 1: Kullan\u0131c\u0131 Kay\u0131t ve Profil G\u00fcncelleme Formlar\u0131<\/h3>\n<p>Bir web uygulamas\u0131nda kullan\u0131c\u0131lar\u0131n kay\u0131t oldu\u011fu veya profillerini g\u00fcncelledi\u011fi formlar, genellikle karma\u015f\u0131k veri yap\u0131lar\u0131na sahiptir. \u00d6rne\u011fin, bir kay\u0131t formunda:<\/p>\n<ul>\n<li>Kullan\u0131c\u0131 ad\u0131, e-posta ve \u015fifre gibi temel bilgiler<\/li>\n<li>\u0130ste\u011fe ba\u011fl\u0131 olarak telefon numaras\u0131<\/li>\n<li>Adres bilgileri (sokak, \u015fehir, posta kodu, \u00fclke)<\/li>\n<li>Belirli ya\u015f\u0131n \u00fczerindeki kullan\u0131c\u0131lar i\u00e7in ek bir onay kutusu<\/li>\n<\/ul>\n<p>Bu senaryoda, JSON Schema kullanarak bu alanlar\u0131n do\u011frulu\u011funu taray\u0131c\u0131da sa\u011flayabiliriz. <code>required<\/code> ile zorunlu alanlar\u0131 belirleyebilir, <code>pattern<\/code> ile e-posta format\u0131n\u0131 do\u011frulayabilir, <code>minLength<\/code> ile \u015fifre karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 kontrol edebiliriz. <code>anyOf<\/code> kullanarak e-posta veya telefon numaras\u0131 alanlar\u0131ndan birinin doldurulmas\u0131n\u0131 zorunlu k\u0131labiliriz. <code>if\/then\/else<\/code> ile ise, kullan\u0131c\u0131n\u0131n ya\u015f\u0131 belirli bir s\u0131n\u0131r\u0131n \u00fczerindeyse ek bir &#8220;onay&#8221; alan\u0131n\u0131n doldurulmas\u0131n\u0131 zorunlu hale getirebiliriz. Bu, sunucuya g\u00f6nderilen verinin kalitesini art\u0131r\u0131r ve kullan\u0131c\u0131ya an\u0131nda geri bildirim sa\u011flar.<\/p>\n<h3>Vaka Analizi 2: API \u0130stek ve Yan\u0131t Do\u011frulamalar\u0131<\/h3>\n<p>Mikroservis mimarilerinde veya RESTful API&#8217;lerde, istemci ve sunucu aras\u0131ndaki veri al\u0131\u015fveri\u015finin belirli bir s\u00f6zle\u015fmeye uymas\u0131 gerekir. API isteklerinin ve yan\u0131tlar\u0131n\u0131n do\u011frulanmas\u0131, ileti\u015fim hatalar\u0131n\u0131 \u00f6nler ve sistemin genel kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. Bir API endpoint&#8217;ine g\u00f6nderilen POST iste\u011finin g\u00f6vdesi (body) bir JSON nesnesi olsun. Bu nesnenin belirli alanlara sahip olmas\u0131, bu alanlar\u0131n belirli veri t\u00fcrlerinde olmas\u0131 ve belirli k\u0131s\u0131tlamalara uymas\u0131 gerekebilir.<\/p>\n<p>JSON Schema kullanarak, bu API iste\u011fi i\u00e7in bir \u015fema tan\u0131mlayabiliriz. <code>properties<\/code> ile beklenen alanlar\u0131, <code>required<\/code> ile zorunlu alanlar\u0131 belirleyebiliriz. <code>allOf<\/code> ile birden fazla \u015femay\u0131 birle\u015ftirerek, \u00f6rne\u011fin hem &#8220;sipari\u015f detaylar\u0131&#8221; hem de &#8220;fatura bilgileri&#8221; \u015femalar\u0131n\u0131n ge\u00e7erli olmas\u0131n\u0131 sa\u011flayabiliriz. API yan\u0131tlar\u0131n\u0131n do\u011frulanmas\u0131 da benzer \u015fekilde yap\u0131l\u0131r; sunucudan gelen verinin, beklenen \u015femaya uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol ederiz. Bu, istemci taraf\u0131nda API&#8217;nin do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair g\u00fcvence sa\u011flar.<\/p>\n<h3>Vaka Analizi 3: Yap\u0131land\u0131r\u0131lm\u0131\u015f Veri Depolama ve Geri Y\u00fckleme<\/h3>\n<p>Web uygulamalar\u0131, kullan\u0131c\u0131 tercihlerini, ayarlar\u0131n\u0131 veya uygulama durumunu yerel depolama (local storage) veya IndexedDB gibi taray\u0131c\u0131 depolama mekanizmalar\u0131nda saklayabilir. Bu verilerin tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak \u00f6nemlidir. \u00d6rne\u011fin, bir uygulaman\u0131n ayarlar\u0131n\u0131 saklad\u0131\u011f\u0131m\u0131z bir JSON nesnesi d\u00fc\u015f\u00fcnelim. Bu ayarlar\u0131n belirli bir yap\u0131s\u0131 olmal\u0131 ve belirli de\u011fer aral\u0131klar\u0131nda olmal\u0131d\u0131r.<\/p>\n<p>JSON Schema ile bu ayarlar i\u00e7in bir \u015fema tan\u0131mlayabiliriz. Bu \u015fema, ayarlar\u0131n do\u011fru yap\u0131da oldu\u011funu ve ge\u00e7erli de\u011ferler i\u00e7erdi\u011fini garanti eder. Uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda, depolanan ayarlar bu \u015femaya g\u00f6re do\u011frulan\u0131r. E\u011fer veri bozuksa veya ge\u00e7ersizse, uygulama varsay\u0131lan ayarlara d\u00f6nebilir veya kullan\u0131c\u0131ya bir hata mesaj\u0131 g\u00f6sterebilir. Bu, uygulaman\u0131n kararl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve beklenmedik davran\u0131\u015flar\u0131 \u00f6nler.<\/p>\n<p>Bu vaka analizleri, taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131m\u0131z\u0131n pratik uygulamalar\u0131n\u0131 g\u00f6stermektedir. Bu t\u00fcr bir ara\u00e7, web geli\u015ftiricilerine veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak, hatalar\u0131 azaltmak ve daha sa\u011flam uygulamalar olu\u015fturmak i\u00e7in g\u00fc\u00e7l\u00fc bir yetenek sunar.<\/p>\n<h2>Geli\u015ftiriciler \u0130\u00e7in \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131m\u0131z\u0131 kullan\u0131rken veya kendi \u00e7\u00f6z\u00fcmlerinizi geli\u015ftirirken dikkate alman\u0131z gereken baz\u0131 \u00f6nemli ipu\u00e7lar\u0131 ve en iyi uygulamalar bulunmaktad\u0131r. Bu \u00f6neriler, projenizin verimlili\u011fini, okunabilirli\u011fini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131rman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<ul>\n<li><strong>\u015eemalar\u0131 Mod\u00fclerle\u015ftirin:<\/strong> Karma\u015f\u0131k \u015femalar\u0131 k\u00fc\u00e7\u00fck, tekrar kullan\u0131labilir par\u00e7alara b\u00f6lmek i\u00e7in <code>$ref<\/code> mekanizmas\u0131n\u0131 aktif olarak kullan\u0131n. Bu, \u015femalar\u0131n\u0131z\u0131n daha kolay y\u00f6netilmesini, anla\u015f\u0131lmas\u0131n\u0131 ve hata ay\u0131klanmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, &#8220;adres&#8221; veya &#8220;ileti\u015fim bilgileri&#8221; gibi yayg\u0131n yap\u0131lar\u0131 ayr\u0131 \u015femalarda tan\u0131mlay\u0131p farkl\u0131 yerlerde referans verebilirsiniz.<\/li>\n<li><strong>A\u00e7\u0131k ve Bilgilendirici Hata Mesajlar\u0131:<\/strong> Do\u011frulama hatalar\u0131n\u0131 kullan\u0131c\u0131ya veya geli\u015ftiriciye sunarken, sorunun ne oldu\u011funu ve nerede oldu\u011funu a\u00e7\u0131k\u00e7a belirten mesajlar kullan\u0131n. Sadece &#8220;ge\u00e7ersiz veri&#8221; demek yerine, &#8220;e-posta alan\u0131 ge\u00e7erli bir formatta de\u011fil&#8221; veya &#8220;\u015fifre en az 8 karakter uzunlu\u011funda olmal\u0131&#8221; gibi spesifik bilgiler sunmak, kullan\u0131c\u0131lar\u0131n hatalar\u0131 d\u00fczeltmelerini kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Performans Optimizasyonu:<\/strong> B\u00fcy\u00fck veri k\u00fcmeleri veya karma\u015f\u0131k \u015femalarla \u00e7al\u0131\u015f\u0131rken performans\u0131n \u00f6nemli oldu\u011funu unutmay\u0131n. M\u00fcmk\u00fcn oldu\u011funca verimli algoritmalar kullan\u0131n ve gereksiz tekrarlayan hesaplamalardan ka\u00e7\u0131n\u0131n. \u00d6rne\u011fin, s\u0131k kullan\u0131lan \u015femalar\u0131 \u00f6nbelle\u011fe almak (cache) performans\u0131 art\u0131rabilir.<\/li>\n<li><strong>Test Odakl\u0131 Geli\u015ftirme:<\/strong> Kapsaml\u0131 test senaryolar\u0131 yazmak, do\u011frulay\u0131c\u0131n\u0131z\u0131n g\u00fcvenilirli\u011fini sa\u011flaman\u0131n en iyi yoludur. Spesifikasyonun t\u00fcm \u00f6zelliklerini ve olas\u0131 kenar durumlar\u0131n\u0131 kapsayan testler olu\u015fturun. Otomatikle\u015ftirilmi\u015f testler, kod de\u011fi\u015fiklikleri sonras\u0131nda geriye d\u00f6n\u00fck uyumlulu\u011fu (backward compatibility) koruman\u0131za yard\u0131mc\u0131 olur.<\/li>\n<li><strong>Belgelendirme:<\/strong> JSON Schema&#8217;n\u0131z\u0131 ve do\u011frulay\u0131c\u0131n\u0131z\u0131n API&#8217;sini iyi bir \u015fekilde belgeleyin. Hangi \u00f6zelliklerin desteklendi\u011fini, nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 ve olas\u0131 k\u0131s\u0131tlamalar\u0131 a\u00e7\u0131klayan net bir dok\u00fcmantasyon, di\u011fer geli\u015ftiricilerin \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fc kolayca benimsemesini sa\u011flar.<\/li>\n<li><strong>Standartlara Uyun:<\/strong> JSON Schema spesifikasyonunun en son s\u00fcr\u00fcm\u00fcn\u00fc takip edin ve m\u00fcmk\u00fcn oldu\u011funca standartlara uygun hareket edin. Bu, farkl\u0131 ara\u00e7lar ve platformlarla uyumlulu\u011fu art\u0131r\u0131r.<\/li>\n<li><strong>\u00d6zel Do\u011frulama Kurallar\u0131 (Extensions):<\/strong> E\u011fer standart JSON Schema \u00f6zellikleri ihtiyac\u0131n\u0131z\u0131 kar\u015f\u0131lam\u0131yorsa, \u00f6zel do\u011frulama kurallar\u0131 (extensions) eklemeyi d\u00fc\u015f\u00fcnebilirsiniz. Ancak, bu, uyumluluk sorunlar\u0131na yol a\u00e7abilece\u011fi i\u00e7in dikkatli yap\u0131lmal\u0131d\u0131r.<\/li>\n<li><strong>Taray\u0131c\u0131 Uyumlulu\u011fu:<\/strong> Do\u011frulay\u0131c\u0131n\u0131z\u0131n farkl\u0131 taray\u0131c\u0131larda ve s\u00fcr\u00fcmlerde sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun. JavaScript&#8217;in farkl\u0131 uygulama \u015fekilleri ve taray\u0131c\u0131 API&#8217;lerinin deste\u011fi konusunda dikkatli olun.<\/li>\n<\/ul>\n<p>Bu ipu\u00e7lar\u0131 ve en iyi uygulamalar, taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131n\u0131z\u0131n geli\u015ftirme s\u00fcrecini daha verimli ve sonu\u00e7lar\u0131 daha g\u00fcvenilir hale getirecektir. Bu t\u00fcr bir arac\u0131n do\u011fru kullan\u0131m\u0131, web uygulamalar\u0131n\u0131z\u0131n genel kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, taray\u0131c\u0131 tabanl\u0131 bir JSON Schema do\u011frulay\u0131c\u0131 geli\u015ftirme s\u00fcrecini, JSON Schema&#8217;n\u0131n Draft-07 standard\u0131n\u0131, <code>$ref<\/code>, <code>allOf<\/code>, <code>anyOf<\/code>, <code>oneOf<\/code> ve <code>if\/then\/else<\/code> gibi geli\u015fmi\u015f \u00f6zelliklerini ve bu \u00f6zelliklerin 173 adet kapsaml\u0131 test ile nas\u0131l g\u00fcvence alt\u0131na al\u0131nd\u0131\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Taray\u0131c\u0131 \u00fczerinde veri do\u011frulamas\u0131 yapman\u0131n performans, g\u00fcvenlik ve geli\u015ftirme kolayl\u0131\u011f\u0131 a\u00e7\u0131s\u0131ndan sundu\u011fu avantajlar\u0131 vurgulad\u0131k. Ger\u00e7ek d\u00fcnya senaryolar\u0131na y\u00f6nelik vaka analizleri ile bu arac\u0131n pratik kullan\u0131m alanlar\u0131n\u0131 g\u00f6sterdik ve geli\u015ftiriciler i\u00e7in en iyi uygulamalar\u0131 payla\u015ft\u0131k.<\/p>\n<p>Geli\u015ftirdi\u011fimiz bu taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulay\u0131c\u0131, web uygulamalar\u0131nda veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, API s\u00f6zle\u015fmelerini y\u00f6netmek ve kullan\u0131c\u0131 deneyimini iyile\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir \u00e7\u00f6z\u00fcm sunmaktad\u0131r. A\u00e7\u0131k kaynakl\u0131 olmas\u0131, toplulu\u011fun katk\u0131da bulunmas\u0131na ve arac\u0131n s\u00fcrekli geli\u015ftirilmesine olanak tan\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n      <strong>Soru:<\/strong> Bu do\u011frulay\u0131c\u0131 hangi JSON Schema s\u00fcr\u00fcmlerini destekliyor?<br \/>\n      <br \/>\n      <strong>Cevap:<\/strong> Bu makalede detayland\u0131r\u0131lan do\u011frulay\u0131c\u0131, JSON Schema&#8217;n\u0131n Draft-07 standard\u0131na odaklanm\u0131\u015ft\u0131r. Ancak, mimari geni\u015fletilebilir oldu\u011fu i\u00e7in gelecekte di\u011fer s\u00fcr\u00fcmler de desteklenebilir.\n    <\/li>\n<li>\n      <strong>Soru:<\/strong> Taray\u0131c\u0131 tabanl\u0131 do\u011frulama, sunucu taraf\u0131 do\u011frulamay\u0131 tamamen ortadan kald\u0131r\u0131r m\u0131?<br \/>\n      <br \/>\n      <strong>Cevap:<\/strong> Hay\u0131r, taray\u0131c\u0131 tabanl\u0131 do\u011frulama sunucu taraf\u0131 do\u011frulamay\u0131 tamamlay\u0131c\u0131 niteliktedir. G\u00fcvenlik ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fc a\u00e7\u0131s\u0131ndan sunucu taraf\u0131nda da do\u011frulama yap\u0131lmas\u0131 \u00f6nerilir. Taray\u0131c\u0131 do\u011frulama, kullan\u0131c\u0131ya an\u0131nda geri bildirim sa\u011flar ve sunucu y\u00fck\u00fcn\u00fc azalt\u0131r.\n    <\/li>\n<li>\n      <strong>Soru:<\/strong> Karma\u015f\u0131k veya b\u00fcy\u00fck JSON \u015femalar\u0131n\u0131 i\u015flerken performans sorunu ya\u015fan\u0131r m\u0131?<br \/>\n      <br \/>\n      <strong>Cevap:<\/strong> Performans, tasar\u0131m \u00f6nceliklerimizden biriydi. Ancak, \u00e7ok b\u00fcy\u00fck veya a\u015f\u0131r\u0131 karma\u015f\u0131k \u015femalarla \u00e7al\u0131\u015f\u0131rken performans d\u00fc\u015f\u00fc\u015fleri ya\u015fanabilir. Bu t\u00fcr durumlarda, \u015femalar\u0131 optimize etmek, mod\u00fclerle\u015ftirmek ve gereksiz karma\u015f\u0131kl\u0131ktan ka\u00e7\u0131nmak \u00f6nemlidir. Ayr\u0131ca, gelecekteki optimizasyon \u00e7al\u0131\u015fmalar\u0131 bu konuda daha da iyile\u015ftirmeler sa\u011flayacakt\u0131r.\n    <\/li>\n<li>\n      <strong>Soru:<\/strong> Do\u011frulay\u0131c\u0131ya \u00f6zel (custom) do\u011frulama kurallar\u0131 ekleyebilir miyim?<br \/>\n      <br \/>\n      <strong>Cevap:<\/strong> Do\u011frulay\u0131c\u0131m\u0131z\u0131n mimarisi, \u00f6zel do\u011frulama kurallar\u0131n\u0131n (extensions) eklenmesine olanak tan\u0131yacak \u015fekilde tasarlanabilir. Ancak, bu, spesifikasyon d\u0131\u015f\u0131 bir kullan\u0131m olaca\u011f\u0131 i\u00e7in dikkatli bir implementasyon ve ek testler gerektirecektir.\n    <\/li>\n<li>\n      <strong>Soru:<\/strong> Bu do\u011frulay\u0131c\u0131y\u0131 hangi projelerde kullanabilirim?<br \/>\n      <br \/>\n      <strong>Cevap:<\/strong> Bu do\u011frulay\u0131c\u0131, istemci taraf\u0131nda veri do\u011frulamas\u0131n\u0131n gerekti\u011fi her t\u00fcrl\u00fc web uygulamas\u0131nda kullan\u0131labilir. \u00d6rne\u011fin, form do\u011frulamalar\u0131, API istek\/yan\u0131t do\u011frulamalar\u0131, yap\u0131land\u0131r\u0131lm\u0131\u015f verilerin yerel depolamada do\u011frulanmas\u0131 gibi senaryolar i\u00e7in idealdir.\n    <\/li>\n<\/ul>\n<p>Bu makalenin, taray\u0131c\u0131 tabanl\u0131 JSON Schema do\u011frulama konusundaki anlay\u0131\u015f\u0131n\u0131z\u0131 derinle\u015ftirdi\u011fini ve kendi projelerinizde bu teknolojiyi kullanman\u0131z i\u00e7in size ilham verdi\u011fini umuyoruz.<\/p>\n<p>#Teknoloji #WebGeli\u015ftirme #JSONSchema #JavaScript #VeriDo\u011frulama<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/browser-json-schema-validator-demo\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/browser-json-schema-validator-demo<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Web uygulamalar\u0131nda veri tutarl\u0131l\u0131\u011f\u0131 ve do\u011frulu\u011fu, kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen kritik unsurlard\u0131r.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-42894","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test\" \/>\n<meta property=\"og:description\" content=\"Web uygulamalar\u0131nda veri tutarl\u0131l\u0131\u011f\u0131 ve do\u011frulu\u011fu, kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen kritik unsurlard\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-28T06:01:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-28T06:02:00+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test\",\"datePublished\":\"2026-06-28T06:01:15+00:00\",\"dateModified\":\"2026-06-28T06:02:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/\"},\"wordCount\":4614,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/\",\"name\":\"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-06-28T06:01:15+00:00\",\"dateModified\":\"2026-06-28T06:02:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/","og_locale":"tr_TR","og_type":"article","og_title":"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test","og_description":"Web uygulamalar\u0131nda veri tutarl\u0131l\u0131\u011f\u0131 ve do\u011frulu\u011fu, kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen kritik unsurlard\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-06-28T06:01:15+00:00","article_modified_time":"2026-06-28T06:02:00+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test","datePublished":"2026-06-28T06:01:15+00:00","dateModified":"2026-06-28T06:02:00+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/"},"wordCount":4614,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/","url":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/","name":"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-06-28T06:01:15+00:00","dateModified":"2026-06-28T06:02:00+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/tarayici-tabanli-json-schema-dogrulayici-draft-07-ref-mantiksal-operatorler-ve-173-test\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Taray\u0131c\u0131 Tabanl\u0131 JSON Schema Do\u011frulay\u0131c\u0131: Draft-07, $ref, Mant\u0131ksal Operat\u00f6rler ve 173 Test"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=42894"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42894\/revisions"}],"predecessor-version":[{"id":42895,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42894\/revisions\/42895"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=42894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=42894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=42894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}