2016-12-01 121 views
4

我已經給出了由REST API生成的一些JSON文件,其中包含大量屬性。將JSON轉換爲JSON Schema草稿4與Swagger 2.0兼容

我已經爲此API創建了Swagger 2.0定義,並且需要爲其提供相應的響應模式。

主要問題:此JSON文件具有負載屬性。如果我手動編寫模式,它會花費很多時間,並且會犯很多錯誤。而且這不是我需要描述的唯一API。

我知道有一些工具可以將JSON轉換爲JSON模式,但是如果我沒有弄錯,Swagger只有$ refs給其他對象定義,因此只有一個級別,而我發現的工具只能生成樹形結構模式。 我的問題:是否有任何工具將JSON(或JSON模式)轉換爲Swagger 2.0兼容的工具?

注:我在YAML工作,但我不會是一個問題,會嗎?

例如,我需要什麼:

List of Movements: 
    type: "array" 
    items: 
     $ref: "#/definitions/Movement" 
    Movement: 
    properties: 
     dateKey: 
     type: "string" 
     movement: 
     $ref: "#/definitions/Stock" 
    additionalProperties: false 
    Stock: 
    properties: 
     stkUnitQty: 
     type: "string" 
     stkDateTime: 
     type: "string" 
     stkUnitType: 
     type: "string" 
     stkOpKey: 
     type: "string" 
    additionalProperties: false 

對於我的JSON文件:

[ 
    { 
    "dateKey": "20161110", 
    "stkLvls": [ 
     { 
     "stkOpKey": "0", 
     "stkUnitType": "U", 
     "stkDateTime": "20161110T235010.240+0100", 
     "stkUnitQty": 30 
     } 
    ] 
    }, 
    { 
    "dateKey": "20161111", 
    "stkLvls": [ 
     { 
     "stkOpKey": "0", 
     "stkUnitType": "U", 
     "stkDateTime": "20161111T231245.087+0100", 
     "stkUnitQty": 21 
     } 
    ] 
    } 
    ] 

但是,什麼http://jsonschema.net/#/給我:

--- 
"$schema": http://json-schema.org/draft-04/schema# 
type: array 
items: 
    type: object 
    properties: 
    dateKey: 
     type: string 
    stkLvls: 
     type: array 
     items: 
     type: object 
     properties: 
      stkOpKey: 
      type: string 
      stkUnitType: 
      type: string 
      stkDateTime: 
      type: string 
      stkUnitQty: 
      type: integer 
     required: 
     - stkOpKey 
     - stkUnitType 
     - stkDateTime 
     - stkUnitQty 
    required: 
    - dateKey 
    - stkLvls 

我是新來的那個,但很好奇,不要猶豫,深入解釋。

非常感謝您的幫助!

回答

2

我知道有一些工具,以JSON轉換成JSON模式,但是,如果 我沒有記錯,揚鞭只有$裁判對其他對象的定義 因此只有一個級別

你是錯誤的。 Swagger會尊重任何有效的v4 JSON模式,只要它只使用supported subset即可。

架構對象...是根據JSON架構規範草案4和 使用它的預定義子集。除此子集之外,本規範還提供了擴展,以允許更完整的文檔。

它繼續列出支持的JSON模式的各個部分,以及不是的位,以及通過放大器擴展的位。

+0

你好Tom&謝謝你的答案。 在https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/yaml/uber.yaml我可以看到定義標記只有一個級別。當需要使用其他類型時,他們會爲另一種類型創建一個$ ref:'#/ definitions/Activity'。 但是在JSON Schema v4中,它不是強制性的。 任何解決方案? – Cwellan

7

我還需要一個轉換器工具,並遇到此問題。到目前爲止,它似乎工作得很好。它同時使用JSON和YAML格式。

https://swagger-toolbox.firebaseapp.com/

鑑於這種JSON(其樣本):

{ 
    "id": 1, 
    "name": "A green door", 
    "price": 12, 
    "testBool": false, 
    "tags": [ 
    "home", 
    "green" 
    ] 
} 

它產生這樣的:

{ 
    "required": [ 
     "id", 
     "name", 
     "price", 
     "testBool", 
     "tags" 
    ], 
    "properties": { 
     "id": { 
      "type": "number" 
     }, 
     "name": { 
      "type": "string" 
     }, 
     "price": { 
      "type": "number" 
     }, 
     "testBool": { 
      "type": "boolean" 
     }, 
     "tags": { 
      "type": "array", 
      "items": { 
       "type": "string" 
      } 
     } 
    } 
}