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

Swagger model for an array with named elements

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

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

我会为它编写以下 swagger 模型:

"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"
  }
}

如何编写这个模型?

提前致谢。

要描述请求模型,您需要使用 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 中不可用。换句话说,没有限制密钥内容的技术方法。