假设我有User和UserType模型。我想在User模型中添加对UserType-ID的引用。 swagger文档仅显示如何引用另一个(整个)模型,而不仅仅是它的一个属性。
所以我想知道它甚至可以仅引用另一个模型定义的属性。
"definitions": {
"User": {
"required": [
"username",
"typeId"
],
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"username": {
"type": "string"
},
"typeId": {
"$ref": "UserType.id" // ==> this doesn't work! and without
// the ".id" part it would include all
// the properties of UserType
}
}
},
"UserType": {
"required": [
"name"
],
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
}
}
}
}
或者根本不可能,它应该只是:
"definitions": {
"User": {
...
"properties": {
"typeId": {
"type": "integer",
"format": "int32"
}
}
},
...
}
答案 0 :(得分:6)
在Swagger 2.0中,Schema Objects不需要描述模型(与以前版本中的Model Object不同)。例如,如果你看" body"参数,您将看到您需要将Schema定义为类型,但该模式也可以表示基元和数组。
对于上述问题(和评论),我建议使用以下结构:
"defintions": {
"User": {
"required": [
"username",
"typeId"
],
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"username": {
"type": "string"
},
"typeId": {
"$ref": "#/definitions/TypeId"
}
}
},
"UserType": {
"required": [
"name"
],
"properties": {
"id": {
"$ref": "#/definitions/TypeId"
},
"name": {
"type": "string"
}
}
},
"TypeId": {
"type": "integer",
"format": "int32"
}
}
TypeId现在已外部化,如果时间到了,您想要更改其定义,您可以在一个地方进行更改。当然,您可能希望在字段和模型中添加额外的"description"
,以便更好地记录目的。