在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会优先吗?NewPet?它是未定义/无效的?它定义了应用程序吗?
我在高傲的编辑上试过这个。显然,带有两个refs的模式是有效的,但是swagger编辑器并不解析这些属性。如果只显示这两个引用的所有内容。
编辑:根据本教程的说法,在相同的范围内有几个参考文献是有效的。但是,对于这两种模式都具有相同名称的不同属性的情况,没有什么可说的。
发布于 2017-02-26 21:04:28
JSON架构不支持继承。allOf的行为有时看起来像继承,但如果您这样想,您最终会感到困惑。
allOf关键字的意思就是:所有模式都必须验证。没有任何东西会被重写或优先于其他任何东西。一切都必须确认。
在您的示例中,JSON值必须完全针对"NewPet“和"OldPet”进行验证。因为没有JSON值可以同时作为字符串和整数进行验证,所以"name“属性的验证总是不能针对"NewPet”或"OldPet“(或两者都验证)进行验证。因此,"Pet“模式永远不会针对任何给定的JSON值进行验证。
发布于 2017-06-25 12:45:24
要考虑的一件事是继承意味着什么。在中,试图创建一个扩展具有相同属性的两个类的类是一个错误。我从来没有少考虑过这种多重继承。
这就是钻石问题。请参阅继承
https://stackoverflow.com/questions/42449296
复制相似问题