在OpenAPI中,使用allof
可以實現繼承。例如,在this example:OpenAPI/JSON Schema中的多繼承/組合
"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?它是未定義的/無效的?它是應用程序定義的?
我在swagger-editor試過這個。很顯然,具有兩個引用的架構是有效的,但是,swagger-editor不能解析這些屬性。如果只是顯示所有的兩個引用。
編輯:根據this tutorial,有幾個參考文獻在同一個allof是有效的。但是對於兩個模式具有不同屬性且具有相同名稱的情況沒有任何說法。
謝謝。這個答案很清楚。我想這樣做的結果是OpenAPI不應該只依靠一個'allOf'來管理繼承,因爲存在一些特殊情況,就像我公開的那樣,其中Schemas彼此繼承,但是'allOf'不能用過的。在這種情況下,像'x-inherits'或'x-childOf'這樣的顯式字段會派上用場。 –