OpenAPIでは、継承はallof
で実現されます。例えば、this exampleに:OpenAPI/JSONスキーマの多重継承/合成
"definitions": {
"Pet": {
"type": "object",
"allOf": [
{
"$ref": "#/definitions/NewPet" # <--- here
},
[...]
]
},
"NewPet": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
}
},
私は多重継承に関する仕様は何で見つけることができませんでした。たとえば、ペットがNewPetとOldPetの両方から継承する場合、 Pythonで
、私は
class Pet(NewPet, OldPet):
...
を書くでしょうし、メソッド解決順序は、親クラスはメソッド/属性に対して最初にチェックすべきかについての決定論的であるので、Pet.ageはNewPet.ageになる場合、私が言うことができますまたはOldPet.age。
だから、名前のプロパティが両方のスキーマで定義されているNewPetとOldPetの両方からPetを継承させると、それぞれの値が異なります。ペットの名前は何ですか?
"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で試しました。どうやら、2つのリファレンスを持つスキーマは有効ですが、スワッガーエディタはプロパティを解決しません。 2つの参照とのアローフを表示するだけの場合。
編集:this tutorialによれば、同じアロフに複数の参照があると有効です。しかし、両方のスキーマが同じ名前の異なる属性を持つ場合については何も言及されていません。
ありがとうございます。この答えはすべてのことを明確にします。その結果、OpenAPIは継承を管理するために 'allOf'を単独で使うべきではないということです。スキーマが互いに継承しますが、' allOf'はできません。中古。この場合、 'x-inherits'や' x-childOf'のような明示的なフィールドが便利です。 –