2014-10-05 24 views
27

içinde nasıl tanımlarım? Yapılandırdığım web-api'yi tanımlamak için Swagger kullanıyorum. Sorun şu ki karmaşık json nesnesini nasıl anlatacağımı anlayamıyorum?Karmaşık json modelini swagger

Örneğin, tarif etmek nasıl bu nesneler:

{ 
    name: "Jhon", 
    address: [ 
    { 
     type: "home", 
     line1: "1st street" 
    }, 
    { 
     type: "office", 
     line1: "2nd street" 
    } 
    ] 
} 
+2

cevap Swagger 1.2 ve Swagger 2.0 arasında farklıdır:

gibi, satır içi sürümünü istedi. Hangisini kullanmayı planlıyorsunuz? – Ron

+1

Swagger 2.0. Teşekkürler –

+1

Swagger editörüyle birlikte kullanmak için JSON temsilcisini veya YAML birini mi arıyorsunuz? Bu bilgilere sahip olduğumda, size alakalı bir snippet sağlayabiliriz. – Ron

cevap

38

Tamam, yani yukarıdaki açıklamalara dayanarak, aşağıdaki şemayı istiyorum: Ben birkaç varsayımlar yaptık

{ 
    "definitions": { 
    "user": { 
     "type": "object", 
     "required": [ "name" ], 
     "properties": { 
     "name": { 
      "type": "string" 
     }, 
     "address": { 
      "type": "array", 
      "items": { 
      "$ref": "#/definitions/address" 
      } 
     } 
     } 
    }, 
    "address": { 
     "type": "object", 
     "properties": { 
      "type": { 
       "type": "string", 
       "enum": [ "home", "office" ] 
      }, 
      "line1": { 
       "type": "string" 
      } 
     } 
    } 
    } 
} 

Gelecekte yardımcı olmak için örneği biraz daha karmaşık hale getirin. "Kullanıcı" nesnesi için "ad" alanının zorunlu olduğunu beyan ettim. Örneğin, zorunlu olarak adrese de ihtiyacınız varsa, tanımı "gerekli" olarak değiştirebilirsiniz: ["isim", "adres"].

Temel olarak modelleri açıklamak için bir json şeması alt kümesi kullanıyoruz. Tabii ki herkes bunu bilmiyor, ama öğrenmesi ve kullanması oldukça basit.

Gördüğünüz adres türü için sınırı iki seçenek olarak ayarladım - ev ya da ofis. Bu listeye herhangi bir şey ekleyebilir veya bu kısıtlamayı kaldırmak için "enum" i tamamen kaldırabilirsiniz.

Bir özelliğin "type" öğesi "array" olduğunda, ona, dizinin iç tipini bildiren "items" ile eşlik etmeniz gerekir. Bu durumda, başka bir tanım atıfta bulunmuştum, ancak bu tanım aynı zamanda satır içi de olabilirdi. Bu şekilde, özellikle de "adres" tanımına tek başına ihtiyaç duyarsanız veya diğer modeller dahilinde olmak daha kolaydır.

{ 
    "definitions": { 
    "user": { 
     "type": "object", 
     "required": [ 
     "name" 
     ], 
     "properties": { 
     "name": { 
      "type": "string" 
     }, 
     "address": { 
      "type": "array", 
      "items": { 
      "type": "object", 
      "properties": { 
       "type": { 
       "type": "string", 
       "enum": [ 
        "home", 
        "office" 
       ] 
       }, 
       "line1": { 
       "type": "string" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

Detaylı cevap için teşekkür ederiz. Aynı zamanda bir satır içi örneği için yeterince iyi olursanız, harika olacaktır. Başka bir soru SwaggerUI bu karmaşık nesne şemasını destekliyor mu? Çünkü benden test etmiyor. –

+0

Cevabı satır içi sürümüyle değiştirdim. – Ron

+0

Swagger-UI'ye gelince, karmaşık şemaları desteklemelidir. Neyin yanlış olabileceğini anlamak için tam bir örnek görmeliyim. Bu tür sorular için google grubumuzu da kullanabilirsiniz. – Ron

İlgili konular