LoginSignup
23
15

More than 3 years have passed since last update.

[Swagger Editor] Swagger Editor でオブジェクト内の配列を表現したい

Last updated at Posted at 2018-10-31

Swagger Editor を使う機会があったのだが、その際にオブジェクトの中に配列を持つデータ構造を表現するのにハマったので備忘録として残す。

やりたいこと

次のような 「 オブジェクトの中に配列を持つ 」 データを Swagger Editor を使って表現したい。

表現したいデータ
{
  "data": {
    "id": 0000001,
    "name": "hogehogehogehoge",
    "child_id": [
      "child_00001",
      "child_00002",
      "child_00003",
      "child_00004"
    ]
  }
}

実現方法

Swagger Edtitor は YAML で記述するので次の内容となる。

単純にそのまま書く場合

実現するための記法
definitions:
  SampleData:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
              example: 0000001
            name:
              type: string
              example: hogehogehogehoge
            child_id:
              type: array
              items:
                type: string
              example:
                - child_00001
                - child_00002
                - child_00003
                - child_00004

$ref を使う場合

実現するための記法($refあり)
definitions:
  SampleData:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
              example: 0000001
            name:
              type: string
              example: hogehogehogehoge
            child_id:
              $ref: "#/definitions/ChildIdList"

  ChildIdList:
    type: array
    items:
      type: string
      example:
        - child_00001
        - child_00002
        - child_00003
        - child_00004

どこにハマっていたか

child_id を配列で表現する記法がわからなかった。

試行錯誤の例1(エラーになる)

試行錯誤の例1(エラーになる)
child_id:
  type: array
  items:
    - child_00001
    - child_00002
    - child_00003
    - child_00004

としたらエラーになり、

試行錯誤の例2_YAML(配列の中に配列ができる)

試行錯誤の例2_YAML(配列の中に配列ができる)
child_id:
  type: array
  example:
    type: string
    items:
      - child_00001
      - child_00002
      - child_00003
      - child_00004

としたら

試行錯誤の例2_JSON(配列の中に配列ができる)
"child_id": [
  [
    "child_00001",
    "child_00002",
    "child_00003",
    "child_00004"
  ]
],

となったり、とかなり時間をロスした。

まとめにかえて

試行錯誤して上記を解決したあとに気づいたのだが、Swagger Editor には Convert to YAML という機能があって、JSON データを YAML にコンバートしてくれる。
これを利用すればもう少し早く解決できたと思うので、今後記法でつまづいたら

  1. まず JSON で実現したデータを書く
  2. そのデータを Swagger Editor で YAML にコンバートする

という手順を行う、というところでまとめにかえる。

23
15
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
15