2014-11-21 7 views
5

1) आरएएमएल लिखते समय, क्या मैं अपनी स्कीमा परिभाषा में घोंसले का उपयोग कर सकता हूं?आरएएमएल: नेस्टेड स्कीमा

उदाहरण के लिए:

schemas: 
    - DNSResponse: | 
     { 
     "type": "object", 
     "properties": { 
      "AnswerSection": { 
       "type": "array", 
       "items": (((I want a re-useable schema here. ex: ARecord))) 
      }, 
      "AA": {"type": "boolean"}, 
      "AD": {"type": "boolean"}, 
      ... 
     } 
     } 
    - ARecord: | 
     { 
     "type": "object", 
     "properties": { 
      "address": "string", 
      "ttl": "number", 
      "name": "string" 
     } 
     } 

2) मैं nestable स्कीमा का एक सेट के चारों ओर एक विकल्प/enum का उपयोग कर सकते हैं?

"items": [ARecord, MXRecord, PTRRecord, ...] 

उत्तर

6

1) हाँ, आप कर सकते हैं। this example देखें। यही कारण है कि होगा:

"items": { "$ref": "ARecord" } 

2) मेरा मानना ​​है कि इस JSON स्कीमा का मसौदा 4 में संभव है, oneOf निर्देशों का उपयोग। मुझे नहीं लगता कि यह आरएएमएल द्वारा समर्थित है। वैकल्पिक रूप से, आप आधार स्कीमा बना सकते हैं और ARecord, MXRecord और PTRRecord इस आधार स्कीमा का विस्तार कर सकते हैं और फिर आधार स्कीमा की वस्तुओं को अनुमति दे सकते हैं। यह बहुत अर्थपूर्ण रूप से समृद्ध नहीं होगा लेकिन आप शुरू कर सकते हैं।

+1

1) $ ref को एपीआई डिजाइनर या raml2html द्वारा पार्स नहीं किया गया है, इसलिए नेस्टेड आइटम की स्कीमा कभी नहीं दिखायी जाती है। 2) क्या आपके पास स्कीमा बढ़ाने के लिए एक लिंक है? मुझे '{" $ स्कीमा "के अलावा रैमल स्पेक में कोई उदाहरण नहीं दिख रहा है:" http://json-schema.org/draft-03/schema "}' – KFunk

+1

1): "(इस मुद्दे की रिपोर्ट करें विभिन्न परियोजनाओं ... 2) https://github.com/joelittlejohn/jsonschema2pojo/wiki/Reference#extends –

+0

यह $ ref। – Sam

2

के बाद से अपने प्रश्न नहीं है 100% JSON की आवश्यकता होती है, मैं इस जवाब में जोड़ देगा ...

Raml 1.0 विनिर्देशों के रिलीज के साथ

, आप types उपयोग कर सकते हैं, जो आपको सिर्फ इतना है कि (करने की अनुमति देता मैं थोड़ा क्लीनर पर विचार करता हूं)। http://docs.raml.org/specs/1.0/#raml-10-spec-types

Raml 1.0 डेटा प्रकार, जो अपने एपीआई में डेटा का वर्णन करने के लिए एक संक्षिप्त और शक्तिशाली तरीका प्रदान की धारणा का परिचय:

यहाँ संदर्भ कड़ी है। डेटा एक यूआरआई पैरामीटर (आधार या संसाधन यूआरआई), एक क्वेरी पैरामीटर, एक अनुरोध या प्रतिक्रिया शीर्षलेख, या निश्चित रूप से एक अनुरोध या प्रतिक्रिया शरीर में हो सकता है। कुछ प्रकारों का निर्माण किया जाता है, जबकि कस्टम प्रकारों को अंतर्निर्मित प्रकारों (उत्तराधिकारी) से विस्तारित करके परिभाषित किया जा सकता है। किसी भी स्थान पर जहां एपीआई डेटा की अपेक्षा करता है, डेटा का वर्णन करने के लिए एक अंतर्निहित प्रकार का उपयोग किया जा सकता है, या किसी डेटा को उस डेटा का वर्णन करने के लिए इनलाइन बढ़ाया जा सकता है। कस्टम सुरक्षा सुरक्षा प्रकार का नाम भी नामित किया जा सकता है और फिर किसी भी अंतर्निर्मित प्रकार की तरह उपयोग किया जा सकता है।

और उन है कि कम पाठ और अधिक उदाहरण चाहते हैं (Raml प्रलेखन से लिया गया) के लिए:

#%RAML 1.0 
title: API with Types 
types: 
    User: 
    type: object 
    properties: 
     firstname: string 
     lastname: string 
     age:  number 
/users/{id}: 
    get: 
    responses: 
     200: 
     body: 
      application/json: 
      type: User 
+0

का उपयोग करके काम नहीं करता है यदि आपके उपयोगकर्ता के पास नेस्टेड ऑब्जेक्ट जैसे पता है: street, zip_code , शहर, देश? आप उस वस्तु को कैसे घोंसला करते हैं? – EddardOmeka

+1

@ ओमेका उसी तरह से जाएं। आप 'प्रकार' घोंसला कर सकते हैं। 'उपयोगकर्ता' संपत्ति 'पता' हो सकती है जो एक प्रकार है जिसमें कई अन्य गुण हैं। बहुत अधिक ओओ दृष्टिकोण । – blo0p3r

+0

मैं देखता हूं कि आपका क्या मतलब है – EddardOmeka

2

मुझे लगता है कि निम्न उदाहरण यहाँ लागू होता है। यह दो प्रकार Url और File (आरएएमएल 1.0 का उपयोग करके) को परिभाषित करता है और फिर लॉजिकल का उपयोग करता है या Item में सबस्कैमा के रूप में टाइप (उर्फ स्कीमा) को अनुमति देता है। यदि आवश्यक हो तो आप संभावित रूप से अधिक प्रकार शामिल कर सकते हैं।

मैंने कुछ उदाहरणों को भी परिभाषित किया है जो दर्शाते हैं कि यदि आप रैमल-पार्सर का उपयोग कर रहे हैं तो यह कैसे काम करता है।

#%RAML 1.0 
types: 
    Url: 
     properties: 
      url: 
       type: string 
       example: http://www.cats.com/kittens.jpg 
       description: | 
        The url to ingest. 

    File: 
     properties: 
      filename: 
       type: string 
       example: kittens.jpg 
       description: | 
        Name of the file that will be uploaded. 


    Item: 
     description: | 
      An example of a allowing multiple types using RAML 1.0 
     properties: 
      ext: 
       type: File | Url 
     examples: 
      file_example: 
       content: 
        ext: 
         filename: video.mp4 
      url_example: 
       content: 
        ext: 
         url: http://heres.a.url.com/asset.jpg 
      should_fail: 
       content: 
        ext: 
         unexpected: blah 
संबंधित मुद्दे