具有命名元素的数组的Swagger模型

时间:2015-01-09 12:46:54

标签: swagger

为json数组编写swagger模型对我来说非常简单,例如如果我有这个阵列:

[
  {
    "name": "dave",
    "number": 123
  },
  {
    "name": "mary",
    "number": 456
  }
]

我会为它写下面的招摇模型:

"schema": {
  "type": "array",
  "items": {
    "$ref": "Student"
  }
}

"Student": {
  "id": "Student",
  "required": [
    "name",
    "number"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "number": {
      "type": "integer",
      "format": "int32"
    }
  }
}

但是,我有以下内容:

{
  "123": {
    "name": "dave"
  },
  "456": {
    "name": "mary"
  }
}

如何为此编写模型?

提前致谢。

1 个答案:

答案 0 :(得分:10)

要描述请求模型,您需要使用additionalProperties属性。请注意,这在Swagger 2.0中可用,并且在早期版本中不可用。

"definitions": {
    "Student": {
        "type": "object",
        "required": [ "name" ],
        "properties": {
            "name": {
                "type": "string"
            }
        }
    },
    "Students": {
        "type": "object",
        "additionalProperties": {
            "$ref": "#/definitions/Student"
        }
    }
}

上面你看到Student模型,它当前包含“name”属性,但我假设你会添加更多。从上面的示例中,“name”属性是必需的。

第二个模型是Students,它是一个包含地图的对象(additionalProperties)。每个属性都是Student类型(通过引用模型完成,但理论上可以内联定义)。

您不能做的一件事是声明键(或属性名称)是整数或给定类型。这可能是由patternedProperties支持的,这在Swagger 2.0中是不可用的。换句话说,没有技术方法来限制密钥的内容。