gpt4 book ai didi

swagger - OpenAPI/JSON Schema 中的多重继承/组合

转载 作者:行者123 更新时间:2023-12-05 04:11:36 28 4
gpt4 key购买 nike

在 OpenAPI 中,继承是通过 allof 实现的。例如,在 this example 中:

  "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 中尝试过这个.显然,具有两个引用的模式是有效的,但 swagger-editor 不解析属性。如果只显示带有两个引用的 allof。

编辑:根据this tutorial ,在同一个 allof 中有多个引用是有效的。但是对于两个模式具有同名的不同属性的情况没有任何说明。

最佳答案

JSON Schema 不支持继承。 allOf 的行为有时看起来像是继承,但如果你这样想,你最终会感到困惑。

allOf 关键字的意思就是它所说的:所有模式都必须验证。没有任何事情会被覆盖或优先于其他任何事情。一切都必须验证。

在您的示例中,JSON 值必须针对“NewPet”和“OldPet”进行完整验证。因为没有可以同时验证为字符串和整数的 JSON 值,所以对“name”属性的验证将始终无法验证“NewPet”或“OldPet”(或两者)。因此,“Pet”模式永远不会针对任何给定的 JSON 值进行验证。

关于swagger - OpenAPI/JSON Schema 中的多重继承/组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42449296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com