2016-12-01 7 views
4

多くのプロパティを持つREST APIによって生成されたJSONファイルがいくつか与えられました。JSONをJSONに変換するスキーマドラフト4をSwagger 2.0と互換性があります

私はこのAPIにSwagger 2.0定義を作成しました。これに対応するスキーマを応答に付ける必要があります。

主な問題:このJSONファイルには多数のプロパティがあります。私はスキーマを手作業で書くと時間がかかり、多くの間違いを犯します。そして、それが私が説明する必要がある唯一のAPIではありません。

JSONをJSONスキーマに変換するいくつかのツールがありますが、私が誤解していない場合、Swaggerは他のオブジェクト定義に$ refsしか持たないので、私が見つけたツールはツリー構造スキーマ。 私の質問:JSON(またはJSONスキーマ)をSwagger 2.0互換のものに変換するツールはありますか?

注:私はYAMLで働いていますが、問題はありませんか?私は必要なもの例えば

、:私のJSONドキュメントの

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 

[ 
    { 
    "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を変換するためにいくつかのツールがあります知っているが、闊歩のみ他のオブジェクトに$ REFを持つ を画成これだけあなたは1つのレベル

を持っています間違っている。 Swaggerは、supported subsetのみを使用する限り、有効なv4 JSONスキーマを尊重します。

スキーマ・オブジェクトは... JSONスキーマ仕様のドラフト4に基づいて の事前定義されたサブセットを使用しています。このサブセットの上には、より完全な のドキュメントを可能にするために、この仕様によって提供される拡張があります。

サポートされているJSONスキーマの部分と、そうでないビットと、swaggerで拡張されたビットを一覧表示します。

+0

こんにちはトム&答えてくれてありがとう:それはこれを生成

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

を。 https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/yaml/uber.yaml上で、定義マークにレベルが1つしかないことがわかります。他の型を使う必要があるときは、$ ref: '#/ definitions/Activity'を他の型にします。 JSONスキーマv4では、必須ではありません。 どのような解決策ですか? – Cwellan

7

私はコンバータツールも必要とし、これを見つけました。これまでのところ、かなりうまくいくようです。 JSON形式とYAML形式の両方を行います。

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

このJSON(そのサンプル)を考える:

{ 
    "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" 
      } 
     } 
    } 
} 
関連する問題