如何在swagger中描述复杂的json模型

Ido*_*Ran 30 swagger swagger-ui

我正在尝试使用Swagger来描述我正在构建的web-api.问题是我无法理解如何描述复杂的json对象?

例如,如何描述这个对象:

{
  name: "Jhon",
  address: [
    {
      type: "home",
      line1: "1st street"
    },
    {
       type: "office",
       line1: "2nd street"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Ron*_*Ron 41

好的,基于上面的评论,您需要以下架构:

{
  "definitions": {
    "user": {
      "type": "object",
      "required": [ "name" ],
      "properties": {
        "name": {
          "type": "string"
        },
        "address": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/address"
          }
        }
      }
    },
    "address": {
        "type": "object",
        "properties": {
            "type": {
                "type": "string",
                "enum": [ "home", "office" ]
            },
            "line1": {
                "type": "string"
            }
        }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我做了一些假设,使样本更复杂,以便将来提供帮助.对于"user"对象,我已声明"name"字段是必需的.例如,如果您还需要地址是必需的,则可以将定义更改为"required":["name","address"].

我们基本上使用json-schema的子集来描述模型.当然不是每个人都知道,但学习和使用起来相当简单.

对于地址类型,您可以看到我还将限制设置为两个选项 - 家庭或办公室.您可以向该列表添加任何内容,或完全删除"枚举"以删除该约束.

当属性的"类型"是"数组"时,您需要使用"items"来声明数组的内部类型.在这种情况下,我引用了另一个定义,但该定义也可以是内联的.通常这种方式更容易维护,特别是如果您单独或在其他模型中需要"地址"定义.

根据要求,内联版本:

{
  "definitions": {
    "user": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "address": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "home",
                  "office"
                ]
              },
              "line1": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)