Swagger OpenAPI/JSON模式中的多重继承/组合

Swagger OpenAPI/JSON模式中的多重继承/组合,swagger,multiple-inheritance,jsonschema,openapi,Swagger,Multiple Inheritance,Jsonschema,Openapi,在OpenAPI中,继承是通过allof实现的。例如,在: “定义”:{ “宠物”:{ “类型”:“对象”, “allOf”:[ { “$ref”:“#/definitions/NewPet”#JSON模式不支持继承。allOf的行为有时看起来像继承,但如果你这样想,你最终会感到困惑 allOf关键字的意思就是:所有模式都必须验证。没有任何内容被覆盖或优先于任何其他内容。所有内容都必须验证 在您的示例中,JSON值必须针对“NewPet”和“OldPet”进行完整验证。因为没有JSON值可以同时

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

“定义”:{
“宠物”:{
“类型”:“对象”,
“allOf”:[
{

“$ref”:“#/definitions/NewPet”#JSON模式不支持继承。
allOf
的行为有时看起来像继承,但如果你这样想,你最终会感到困惑

allOf
关键字的意思就是:所有模式都必须验证。没有任何内容被覆盖或优先于任何其他内容。所有内容都必须验证


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

< P>一个要考虑的事情是继承意味着什么。在Eclipse建模框架中,试图创建一个具有相同属性的2个类的类是一个错误。
这就是所谓的钻石问题。请参见

谢谢。这个答案让一切都清楚了。我想,这样做的结果是OpenAPI不应该只依赖一个
allOf
来管理继承,因为有一些特殊情况,比如我公开的情况,模式相互继承,但不能使用
allOf
。在这种情况下,一个显式字段,如
x-inherits
x-childOf
将派上用场。您描述的不是继承。它破坏了LSP()。继承有时被称为“is a”关系。您的“NewPet”不是“OldPet”。即使在支持“阴影”概念的语言中,旧成员不会消失,可以访问。您可以通过将
NewPet.name
重命名为
NewPet.new\u name
@Ark kun获得相同的隐藏行为,谢谢提醒。