在 OpenAPI 中,继承是通过allof
. 例如,在此示例中:
"definitions": {
"Pet": {
"type": "object",
"allOf": [
{
"$ref": "#/definitions/NewPet" # <--- here
},
[...]
]
},
"NewPet": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
}
},
我在规范中没有找到任何关于多重继承的内容。例如,如果 Pet 继承自 NewPet 和 OldPet。
在 Python 中,我会写
class Pet(NewPet, OldPet):
...
并且方法解析顺序是确定应该首先检查哪个父类的方法/属性,所以我可以判断 Pet.age 是 NewPet.age 还是 OldPet.age。
那么,如果我让 Pet 从 NewPet 和 OldPet 继承,其中 name 属性在两个模式中定义,并且每个模式中的值不同,该怎么办?Pet.name 是什么?
"definitions": {
"Pet": {
"type": "object",
"allOf": [
{
"$ref": "#/definitions/NewPet" # <--- multiple inheritance
"$ref": "#/definitions/OldPet"
},
[...]
]
},
"NewPet": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
}
},
"OldPet": {
"type": "object",
"properties": {
"name": {
"type": "integer" # <-- name redefined here, different type
},
}
},
OldPet 会优先吗?新宠物?它未定义/无效?它是应用程序定义的吗?
我在swagger-editor中试过这个。显然,具有两个 refs 的模式是有效的,但 swagger-editor 不解析属性。如果只显示两个引用的 allof。
编辑:根据本教程,在同一个 allof 中有多个 refs 是有效的。但是,对于两个模式具有相同名称的不同属性的情况,什么也没说。