哪种语法是正确的-第一种,第二种,还是两者都正确?
components:
schemas:
FileContent:
allOf:
- $ref: '#/components/schemas/FileInfo'
- type: object
properties:
storageMethod:
$ref: '#/components/schemas/StorageMethod'
contentRange:
type: string
nullable: true
# ... other properties ...
additionalProperties: false
components:
schemas:
FileContent:
type: object
allOf:
- $ref: '#/components/schemas/FileInfo'
properties:
storageMethod:
$ref: '#/components/schemas/StorageMethod'
contentRange:
type: string
nullable: true
# ... other properties ...
additionalProperties: false
我认为第二个:很长一段时间,json模式中忽略了与$ref相邻的模式关键字。后来他们在规范(AFAIK)中更改了它,但我不确定是否所有的工具
然而,我个人的偏好是将父模式和子模式属性放在<code>allOf<code>下,如
schemas:
FileContent:
allOf:
- $ref: '#/components/schemas/FileInfo'
- type: object
properties:
storageMethod:
$ref: '#/components/schemas/StorageMethod'
contentRange:
type: string
nullable: true
totalLength:
type: integer
format: int64
就< code>allOf语法而言,两个版本都是正确的,并且在技术上是等效的:
allOf:
- $ref: '#/components/schemas/Foo'
- properties:
# other properties
# ...
allOf:
- $ref: '#/components/schemas/Foo'
properties:
# other properties
# ...
在OpenAPI 3.1(默认情况下使用JSON模式2020-12)中,如果您只有一个$ref
的话,甚至不需要allOf
,因为$ref
现在允许同级关键字。(但您仍然需要<code>allOf
# openapi: 3.1.0
$ref: '#/components/schemas/Foo'
properties:
# other properties
# ...
您的示例中的错误在其他地方——它是< code > additional properties:false 的存在。这个关键字是有问题的,因为它只知道它的直接兄弟< code>properties,而看不到allOf/oneOf/anyOf子模式或“继承”模式。对于您的示例,这意味着在< code>FileInfo模式中定义的属性实际上不允许出现在组合模式中。
这里有一些更多的例子来说明additionalProperties: false
并不像人们期望的那样工作:
allOf:
- $ref: '#/components/schemas/Foo'
- $ref: '#/components/schemas/Bar'
additionalProperties: false
# Expected: Only the properties defined in Foo and Bar are allowed
# Actual: No properties are allowed
allOf:
- $ref: '#/components/schemas/Foo'
- properties:
prop:
type: string
additionalProperties: false
# Expected: The allowed properties are `prop` and those defined in the Foo schema
# Actual: Only the `prop` property is allowed
allOf:
- $ref: '#/components/schemas/Foo'
properties:
prop:
type: string
additionalProperties: false
# Expected: The allowed properties are `prop` and those defined in the Foo schema
# Actual: Only the `prop` property is allowed
Foo:
type: html" target="_blank">object
properties:
foo:
type: string
additionalProperties: false
Bar:
allOf:
- $ref: '#/components/schemas/Foo'
- properties:
prop:
type: string
# Expected: The Bar schema allows properties from Foo + the `prop` property
# Actual: The Bar schema allows only properties from Foo
这在OpenAPI 3.1/JSON模式2019-09中通过新的<code>unevaluedProperties:false<code>关键字解决。因此,以下内容将按您预期的方式工作:
# openapi: 3.1.0
$ref: '#/components/schemas/Foo'
properties:
prop:
type: string
unevaluatedProperties: false
问题内容: 我已经阅读了很多有关javascript中“继承”的文章。其中一些使用,而另一些则建议。我读得越多,我就越困惑,因为它似乎存在着无穷无尽的变体来解决继承问题。 有人可以告诉我最可接受的方式吗(如果有的话,是事实上的标准)吗? (我想要一个可以扩展或的基础对象。) 问题答案: 简单:并非在所有环境中均受支持,但可以填充。除此之外,两者具有不同的目的:只需创建一个对象从其他继承,同时 还
问题内容: 假设我有多个继承方案: 有编写的两个典型方法的: (老式) (较新的样式) 但是,无论哪种情况,如果父类(和)没有遵循相同的约定,则代码将无法正常工作(某些代码可能会丢失,或被多次调用)。 那么又是什么正确的方法呢?说“保持一致,遵循一个或另一个”很容易,但是如果或来自第三方图书馆,那又如何呢?有没有一种方法可以确保所有父类构造函数都被调用(以正确的顺序,并且只能调用一次)? 编辑:看
问题内容: 我正在尝试在内添加HTML代码段,但无法使用包含功能。看来的当前语法与以前的语法不同:我看到许多示例使用 但是在官方文档中,它说使用 但随后在页面下方显示为 无论如何,我尝试了 我的代码片段不是很多代码,但是有很多事情要做。这可能会引起问题,所以我只用单词代替了内容,仍然一无所获。 我还尝试过直接在页面中声明模板,如下所示: 并遍历了引用脚本的所有变体,仍然一无所获。 我的页面还有很多
问题内容: 我是一名新的Python程序员,他正在从2.6.4跃升至3.1.1。在我尝试使用“ else if”语句之前,一切都很好。解释器在“ else if”中的“ if”之后给了我一个语法错误,原因是我似乎无法弄清。 我可能缺少一些非常简单的东西;但是,我无法自行找到答案。 问题答案: 在python中,“ else if”被拼写为“ elif”。 另外,您还需要在和之后加上一个冒号。 简单
我正在编写一个条件,该条件检查thymleaf属性中的一个条件。 这是一个语法错误,请帮助我
问题内容: 我已经使用具有继承性的Java绑定搜索了json模式,并且所有搜索都导致我使用“ allOf”。 使用allOf可能会解决我的问题,但我想知道json模式中是否有可以使用的构造,该构造将生成具有真实Java继承“ B扩展A”的Java代码- 而不是在B内插入A的所有属性? 我想知道这是否被支持/可行,或者我只是在做梦。如果不支持,我很想知道原因。 问题答案: 好吧,我是两者的作者: 当