JSON Şema Oluşturucu

Bir veya birden fazla JSON örneği yapıştırın; oluşturucu, yeni yükleri doğrulamak için kullanabileceğiniz bir JSON şeması çıkarır. Türleri algılar, her örnekte görünen alanları zorunlu olarak işaretler, değerler küçük ve kapalı bir kümeden geldiğinde enum çıkarır ve JSON şeması draft 2020-12 ile uyumlu çıktı üretir.

JSON şeması nasıl oluşturulur

  1. 1

    Örnek belgeleri yapıştırın

    Bir veya birden fazla gerçek yük; çeşitlilik ne kadar fazlaysa çıkarılan şema o kadar doğru olur.

  2. 2

    Taslağı seçin

    draft 2020-12 (mevcut), draft 07 (yaygın olarak desteklenir) veya draft 04 (eski OpenAPI için).

  3. 3

    Çıkarımı ayarlayın

    Enum çıkarımını açıp kapatma, zorunlu alan stratejisi (kesişim veya birleşim) ve yalnızca bir örnek verildiğinde tüm alanların `required` olarak işaretlenip işaretlenmeyeceği.

  4. 4

    Oluştur

    Şema; `$schema`, `title`, `type`, `properties` ile birlikte ve tekrar eden alt nesneler için iç içe `$ref` değerleriyle üretilir.

Çıkarımın iyi yaptığı şeyler

  • Türler: string, number, integer, boolean, null, array, object.
  • Null olabilirlik: bir örnekte null, başka bir örnekte dize olan bir alan ["string", "null"] olur.
  • Dizi öğeleri: homojen diziler tek bir items şeması üretir; heterojen diziler prefixItems üretir.
  • Enum: gözlemlenen tüm değerler küçük bir kümeden geliyorsa (yapılandırılabilir, varsayılan 10 farklı değer), bir enum üretilir.
  • Zorunlu: birden fazla örnekte anahtarların kesişimi required olur; tek bir örnekte, vazgeçmediğiniz sürece tüm anahtarlar zorunludur.
  • Formatlar: ISO-8601 tarihleri, e-postalar veya URI’lerle eşleşen dizeler çıkarılmış bir format alır.

Çıkarımın bilemeyeceği şeyler

  • Amaç ve örnek karşılaştırması: age: 25 örneği type: integer çıkarır, ancak null değerini de kabul ettiğinizi bilemez. Uç durumları kapsayan birden fazla örnek verin.
  • Kısıtlamalar: minLength, maximum, pattern, bunları elle eklemeniz gerekir. Çıkarım, örneklerden sınırları tahmin etmez.
  • İş mantığı: “bu üç alandan tam olarak biri ayarlanmalıdır” koşulu oneOf gerektirir, çıkarılamaz.
  • Referanslar: oluşturucu düz bir şema üretir. Tekrar eden yapıları $defs içine ayırmak isterseniz, bunu oluşturmadan sonra yapın.

Örnek çıktı

Tek bir örnekten:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

Çıkarılan şema (draft 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

Yaygın hatalar

  • Tek bir örnekten çıkarım yapmak. Şema aşırı uyum sağlar, her alan zorunlu hale gelir ve null’a tolerans kalmaz. Her zaman en az 5–10 çeşitli örnek verin.
  • number demek isterken integer kullanmak. Herhangi bir örnekte ondalık varsa çıkarılan tür number olur; hepsi tam sayıysa integer olur. Her ikisi de olabilecek alanlar için ondalıklı bir örnek ekleyin.
  • İsteğe bağlı alanları unutmak. 5 örnekten 4’ünde bulunan ancak 1’inde eksik olan bir alan isteğe bağlı olur, bu kasıtlıdır. Beş örneğin hepsi bu alanı içeriyorsa, API’nizde aslında isteğe bağlı olsa bile şema onu zorunlu olarak işaretler.

Sık Sorulan Sorular

Ne kadar çok, o kadar iyi; ancak genellikle 5–10 çeşitli örnek makul bir şema üretir. Tek bir örnekle her alan zorunlu hale gelir ve null olabilirlik çıkarılamaz, mümkünse her zaman birden fazla varyant sağlayın.

Varsayılan olarak draft 2020-12. OpenAPI 3.0 uyumluluğu için draft 07 ve draft 04 de mevcuttur (OpenAPI, draft 05/07’nin bir alt kümesini kullanır).

Hayır. Örneklerden kısıtlama çıkarmak şemayı aşırı uyumlu hale getirir. minLength, maximum, pattern vb. değerleri, iş kurallarınıza göre oluşturmadan sonra elle ekleyin.

Evet. Bir JSON dizisi yapıştırırsanız, oluşturucu her öğeyi ayrı bir örnek olarak ele alır ve dış diziyi değil, tek bir öğeyi tanımlayan bir şema üretir. Bunun yerine dış dizinin yapısını istiyorsanız “dizi kapsayıcısı olarak ele al” seçeneğini etkinleştirin.

İlgili Araçlar

Araç diğer dillerde mevcuttur