2014-11-08 52 views
6

में किसी अन्य मॉडल परिभाषा की एक आईडी का संदर्भ कैसे लें मान लें कि मेरे पास उपयोगकर्ता और उपयोगकर्ता टाइप मॉडल है। मैं उपयोगकर्ता मॉडल में उपयोगकर्ता टाइप-आईडी का संदर्भ जोड़ना चाहता हूं। स्वैगर दस्तावेज़ केवल दिखाता है कि किसी अन्य (संपूर्ण) मॉडल को संदर्भित करने के लिए, न केवल इसकी किसी एक संपत्ति के संदर्भ में।स्वैगर

तो मैं सोच रहा था कि यह केवल एक और मॉडल परिभाषा की संपत्ति के संदर्भ में संभव है।

"definitions": { 
    "User": { 
     "required": [ 
      "username", 
      "typeId" 
     ], 
     "properties": { 
      "id": { 
       "type": "integer", 
       "format": "int32" 
      }, 
      "username": { 
       "type": "string" 
      }, 
      "typeId": { 
       "$ref": "UserType.id" // ==> this doesn't work! and without 
             // the ".id" part it would include all 
             // the properties of UserType 
      } 
     } 
    }, 
    "UserType": { 
     "required": [ 
      "name" 
     ], 
     "properties": { 
      "id": { 
       "type": "integer", 
       "format": "int32" 
      }, 
      "name": { 
       "type": "string" 
      } 
     } 
    } 
} 

या सब पर यह संभव नहीं है और यह हमेशा सिर्फ होना चाहिए:

"definitions": { 
    "User": { 
     ... 
     "properties": { 
      "typeId": { 
       "type": "integer", 
       "format": "int32" 
      } 
     } 
    }, 
    ... 
} 
+0

उत्तर में जाने से पहले, आप * आदिम * परिभाषा का संदर्भ क्यों देना चाहते हैं? यह आपको लिखित में क्या बचाता है? – Ron

+0

मुझे लगता है कि मुझे लगता है कि "लिंक" मॉडल देखने के लिए आरईएसटी दस्तावेज पढ़ने वाले किसी के लिए यह स्पष्ट होगा। – roberkules

+0

और यदि मुझे UserType.id के प्रकार को बदलने की आवश्यकता होगी तो मुझे सभी संदर्भों को अपडेट करने की आवश्यकता नहीं होगी। – roberkules

उत्तर

6

स्वैगर 2.0 में, स्कीमा वस्तुओं है आवश्यक (पिछले संस्करणों में मॉडल वस्तु के विपरीत) मॉडल का वर्णन नहीं। उदाहरण के लिए, यदि आप "बॉडी" पैरामीटर देखते हैं, तो आप देखेंगे कि आपको स्कीमा को प्रकार के रूप में परिभाषित करने की आवश्यकता है, लेकिन वह स्कीमा प्राइमेटिव्स और एरे का भी प्रतिनिधित्व कर सकती है।

उपरोक्त प्रश्न (और टिप्पणियों), मैं निम्नलिखित संरचना का उपयोग सुझाव देंगे के लिए:

"defintions": { 
    "User": { 
    "required": [ 
     "username", 
     "typeId" 
    ], 
    "properties": { 
     "id": { 
     "type": "integer", 
     "format": "int32" 
     }, 
     "username": { 
     "type": "string" 
     }, 
     "typeId": { 
     "$ref": "#/definitions/TypeId" 
     } 
    } 
    }, 
    "UserType": { 
    "required": [ 
     "name" 
    ], 
    "properties": { 
     "id": { 
     "$ref": "#/definitions/TypeId" 
     }, 
     "name": { 
     "type": "string" 
     } 
    } 
    }, 
    "TypeId": { 
    "type": "integer", 
    "format": "int32" 
    } 
} 

TypeId अब externalized है, और समय आना चाहिए और आप अपनी परिभाषा को बदलना चाहते हैं, तो आप कर सकते हैं इसे एक स्थान पर बदलें। बेशक, आप अतिरिक्त उद्देश्य के लिए फ़ील्ड और मॉडल में अतिरिक्त "description" जोड़ना चाह सकते हैं।

+1

हाँ, यह वर्तमान में जाने का तरीका है। अफसोस की बात यह है कि यह कुछ डेटा खो देता है जो स्कीमा के आधार पर डेटाबेस उत्पन्न करने के लिए उपयोगी हो सकता है। –

+0

इसके साथ कुछ भी गलत नहीं है। यह एक एपीआई दस्तावेज उपकरण है और एक आवेदन/डेटाबेस एक नहीं है। एक डेटाबेस प्रतिनिधित्व के लिए एक एपीआई प्रतिनिधित्व से प्रोजेक्टिंग मौलिक रूप से गलत नहीं है। – Ron

+0

क्या यह अभी भी मान्य है? – Yerken

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