2014-11-23 77 views
2

我正在使用可以返回XML以及JSON的API,並且正在研究是否有任何方式在Swagger中表示XML模式,並且看起來沒有任何方式。關於Swagger 2.0中的XML的問題

我有2跟進的問題:

  1. 如果我的XML在「示例」對象返回API帖子的XML樣本之一,這仍然很好,對不對?

  2. 模式對象有一個XML對象。我閱讀了描述,但我不確定可以使用哪些情況?任何人都可以舉個例子嗎?如果可以的話,它會非常有幫助。

我只是想確保我不會遺漏任何可以用來使我的API元數據更具描述性的東西。

謝謝你們。

回答

5

當涉及到返回XML和JSON的API時,Swagger假定它們共享一個基本可以互換的公共結構。

也就是說,如果你有這樣的JSON:

{ "key1": "value1", "key2": "value2" }

的XML看起來像:

<object> 
    <key1>value1</key1> 
    <key2>value2</key2> 
</object> 

正如你可以看到,仍然有細微的差別。 XML需要包含在JSON中不存在的元素。這是Swagger規格中的XML對象所在的位置,因爲它允許您添加此附加信息。它還允許您將字段定義爲屬性,聲明所使用的名稱空間並允許更好地控制值的數組,在XML中有幾個變體而不是JSON。

儘管我們沒有XML對象的大量示例,但您可以在此找到一個示例 - https://github.com/swagger-api/swagger-spec/blob/master/fixtures/v2.0/json/models/modelWithXmlAttributes.json。我需要在規範中添加更多的細節,希望在未來幾周。

至於示例字段 - 其值是一個自由格式JSON對象。你可以做的是這樣的:

{ 
    "xml" : "<object>.....</object>" 
} 
+0

是否有一個等效YAML爲例來說明XML響應對象的定義? Thx! – barbazoo 2015-02-03 16:23:13

+0

我不確定是否有,但YAML和JSON完全可以互換。如果你有一個JSON樣本,你可以很容易地使用像http://jsontoyaml.com/ – Ron 2015-02-03 16:26:48

+0

哎呀抱歉..轉換它我錯了,並downvote答案:(只注意到它.. 「您最後投票了這個答覆5幾小時前,你的投票現在被鎖定,除非這個答案被編輯。「大聲笑 – 2015-02-15 06:29:04

2

請參閱下面的招搖結果。

{ 
    "in": "body", 
    "name": "xmlbody", 
    "description": "example of swagger with xml", 
    "required": true, 
    "schema": { 
     "$ref": "#/definitions/myOuter" 
    } 
} 

definitions:{ 
    "myOuter":{ 
     "type":"object", 
     "xml":{ 
     "name":"House" 
     }, 
     "properties":{ 
     "class":{ 
      "type":"string", 
      "enum":[ 
       "singleFamily" 
      ], 
      "xml":{ 
       "attribute":true, 
       "prefix":"home" 
      } 
     }, 
     "masterRoom":{ 
      "type":"object", 
      "properties":{ 
       "bed":{ 
        "type":"string", 
        "xml":{ 
        "prefix":"master" 
        } 
       }, 
       "size":{ 
        "type":"string", 
        "enum":[ 
        "XL" 
        ], 
        "xml":{ 
        "attribute":true 
        } 
       }, 
       "color":{ 
        "type":"string", 
        "enum":[ 
        "brown" 
        ], 
        "xml":{ 
        "attribute":true, 
        "name":"COLOR", 
        "prefix":"paint" 
        } 
       }, 
       "window":{ 
        "type":"string", 
        "enum":[ 
        "slide" 
        ], 
        "xml":{ 
        "attribute":true, 
        "name":"open", 
        "prefix":"view", 
        "namespace":"http://doesntShowUpDueToENUM.com" 
        } 
       } 
      } 
     } 
     } 
    } 
} 

<?xml version="1.0"?> 
    <House home:class="singleFamily"> 
     <masterRoom size="XL" paint:COLOR="brown" view:open="slide"> 
      <master:bed>string</master:bed> 
     </masterRoom> 
    </House>