2015-01-09 7 views
8

एक जेसन सरणी के लिए swagger मॉडल लिखना मेरे लिए बहुत सरल लगता है, उदा।नामित तत्वों के साथ एक सरणी के लिए स्वैगर मॉडल

[ 
    { 
    "name": "dave", 
    "number": 123 
    }, 
    { 
    "name": "mary", 
    "number": 456 
    } 
] 

मैं इसके लिए निम्नलिखित अकड़ मॉडल लिखते थे: अगर मैं इस सरणी था

"schema": { 
    "type": "array", 
    "items": { 
    "$ref": "Student" 
    } 
} 

"Student": { 
    "id": "Student", 
    "required": [ 
    "name", 
    "number" 
    ], 
    "properties": { 
    "name": { 
     "type": "string" 
    }, 
    "number": { 
     "type": "integer", 
     "format": "int32" 
    } 
    } 
} 

हालांकि, मैं निम्नलिखित है:

{ 
    "123": { 
    "name": "dave" 
    }, 
    "456": { 
    "name": "mary" 
    } 
} 

मैं मॉडल कैसे लिख सकता हूँ इस के लिए?

अग्रिम धन्यवाद।

+0

यह एक सरणी नहीं है, यह एक मानचित्र के साथ एक वस्तु है। क्या आप जो वर्णन करना चाहते हैं या नमूना में कोई गलती है? इसके अलावा, आप स्वैगर का किस संस्करण का उपयोग करते हैं? – Ron

+0

आप सही हैं, यह वास्तव में एक सरणी नहीं है। कोई गलती नहीं है, यह वास्तव में जेसन है जिसे मैं वर्णन करना चाहता हूं, लेकिन मुझे यकीन है कि इसके बारे में कैसे जाना है। मैं swagger 2.0 का उपयोग कर रहा हूँ (हालांकि मैं मानता हूं कि मैंने जो लिखा है उसमें कुछ 1.2 बचे हुए हैं)। – DeZot

+0

यदि आप हाथ से टाइपिंग से बचना चाहते हैं, तो आप इस JSON को स्वैगर परिभाषा कनवर्टर को आजमा सकते हैं: https://roger13.github.io/SwagDefGen/ – Roger

उत्तर

10

अनुरोध मॉडल का वर्णन करने के लिए, आपको additionalProperties गुणों का उपयोग करने की आवश्यकता है। आपको याद है, यह स्वैगर 2.0 में उपलब्ध है और पिछले संस्करणों में उपलब्ध नहीं था।

"definitions": { 
    "Student": { 
     "type": "object", 
     "required": [ "name" ], 
     "properties": { 
      "name": { 
       "type": "string" 
      } 
     } 
    }, 
    "Students": { 
     "type": "object", 
     "additionalProperties": { 
      "$ref": "#/definitions/Student" 
     } 
    } 
} 

आप ऊपर Student मॉडल है, जो वर्तमान में, "नाम" प्रॉपर्टी वाला हालांकि मैं आप इसे करने के लिए और अधिक जोड़ देंगे मान देखें। उपरोक्त आपके उदाहरण से, "नाम" संपत्ति आवश्यक है।

दूसरा मॉडल Students है जो एक वस्तु है जिसमें एक नक्शा (अतिरिक्त प्रॉपर्टीज) होता है। प्रत्येक संपत्ति Student प्रकार (मॉडल को संदर्भित करके किया गया है), लेकिन सैद्धांतिक रूप से इनलाइन परिभाषित किया जा सकता था)।

एक चीज जो आप नहीं कर सकते हैं यह घोषित करता है कि कुंजी (या संपत्ति का नाम) एक पूर्णांक या किसी दिए गए प्रकार का है। इसे patternedProperties के साथ समर्थित किया जा सकता था जो स्वैगर 2.0 में उपलब्ध नहीं है। दूसरे शब्दों में, कुंजी की सामग्री को सीमित करने का कोई तकनीकी तरीका नहीं है।

+1

इसके लिए धन्यवाद। ऐसा लगता है कि swagger-ui इसे तब तक समर्थन नहीं करता है जब मैंने कोशिश की, मैंने देखा कि एक खाली वस्तु थी। Swagger-editor पूर्वावलोकनकर्ता मुझे एक खाली वस्तु भी दिखाता है, हालांकि यह किसी भी त्रुटि की रिपोर्ट नहीं करता है। – DeZot

+0

सच है, मेरा मानना ​​है कि यूआई वर्तमान में 'अतिरिक्त प्रॉपर्टीज' का समर्थन नहीं करता है। इसके बारे में एक मुद्दा खोलने के लिए स्वतंत्र महसूस करें। – Ron

संबंधित मुद्दे