jsonからswagger specを生成するコマンドに変更を加えた

github.com

昨日作ったコマンドに変更を加えた。変更点は以下

  • 複数のファイルを渡せるようにした
  • minimapを表示するようにしてみた
  • validationのための --emit=jsonschema を止めた

複数のファイルを渡せるようにした

複数のファイルを渡せるようにした。requiredなどの扱いが顕著に変わる。

例えば、以下の様な2つのファイルを利用して生成したschemaはnicknameがrequiredではない。

foo.json

{
  "name": "foo",
  "age": 20,
  "nickname": "F"
}

bar.json

{
  "name": "bar",
  "age": 22
}
$ swaggerknife json2swagger foo.json bar.json --name person --dst person-spec.yaml

person-spec.yaml

definitions:
  person:
    type: object
    properties:
      name:
        type: string
        example: bar
      age:
        type: integer
        example: 22
      nickname:
        type: string
        example: F
    required:
    - name
    - age

minimapを表示するようにしてみた

--with-minimap をつけるとminimapを表示。暫定的な機能。

{
  "server": {
    "host": "localhost",
    "port": "3306",
    "slave": [
      {"weight": 1, "ip": "10.0.0.1"},
      {"weight": 5, "ip": "10.0.0.2"},
      {"weight": 3, "ip": "10.0.0.3"},
      {"weight": 2, "ip": "10.0.0.4"}
    ]
  },
  "db": {
    "user": "root",
    "pass": "pass"
  }
}

標準出力に出てしまうので注意。そしてJSONにはコメントが無いので注意(invalidなJSONになる)。

$ swaggerknife json2swagger --with-minimap --name config config.json

何となくどのような形かは分かるはず。

# minimap ###
# *config
#   * server
#     * slave[]
#   * db
definitions:
  slaveItem:
    type: object
    properties:
      weight:
        type: integer
        example: 1
      ip:
        type: string
        example: 10.0.0.1
    required:
    - weight
    - ip
  slave:
    type: array
    items:
      $ref: '#/definitions/slaveItem'
  server:
    type: object
    properties:
      host:
        type: string
        example: localhost
      port:
        type: string
        example: '3306'
      slave:
        $ref: '#/definitions/slave'
    required:
    - host
    - port
    - slave
  db:
    type: object
    properties:
      user:
        type: string
        example: root
      pass:
        type: string
        example: pass
    required:
    - user
    - pass
  config:
    type: object
    properties:
      server:
        $ref: '#/definitions/server'
      db:
        $ref: '#/definitions/db'
    required:
    - server
    - db

validationのための --emit=jsonschema を止めた

これは別途tojsonschemaというサブコマンドを作った(経緯は昨日の記事参照)。

以前の以下の様な呼び出しが

$ swaggerknife json2swagger --emit=jsonschema config.json --dst schema.json

以下の様に変わる。

$ swaggerknife json2swagger config.json | swaggerknife tojsonschema --dst schema.json

あと

あと、用例もそれなりに書いた。

http://dictknife.readthedocs.io/en/latest/commands3.html#json2swagger