djp*_*nne 6 swagger swagger-2.0
如何将属性指定为null或引用?讨论如何使用jsonschema将属性指定为null或引用.
我希望以昂首阔步的方式做同样的事情.
回顾上面的答案,使用jsonschema,可以这样做:
{
"definitions": {
"Foo": {
# some complex object
}
},
"type": "object",
"properties": {
"foo": {
"oneOf": [
{"$ref": "#/definitions/Foo"},
{"type": "null"}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
答案的关键是使用oneOf.
我的问题的关键点:
我有一个复杂的对象,我想保持DRY,所以我把它放在一个定义部分,以便在我的swagger规范中重用:其他属性的值; 响应对象等
在我的规范中的各个地方,属性可能是对此类对象的引用或为null.
如何使用不支持的Swagger oneOf或
anyOf?
注意:一些swagger实现使用x-nullable(或某些)指定属性值可以为null,但是,$ref 用它引用的内容替换该对象,因此它将显示任何使用x-nullable被忽略.
在OpenAPI 3.0中,您可以使用:
"foo": {
"nullable": true,
"allOf": [
{
"$ref": "#/definitions/Foo"
}
]
}
Run Code Online (Sandbox Code Playgroud)
YAML版本:
foo:
nullable: true
allOf:
- $ref: '#/definitions/Foo'
Run Code Online (Sandbox Code Playgroud)
包装$ref成allOf是需要结合$ref其他关键字-因为$ref会覆盖所有的兄弟姐妹的关键字。OpenAPI规范存储库中对此进行了进一步讨论:引用对象与“ nullable”不能很好地结合在一起
对于OpenAPI 3.0,由于某种原因,使用nullable: true后跟allOf对于我正在使用的 OpenAPI 解释器不起作用。作为一种解决方法,我最终定义了一个必须为空的引用null_type,我可以在anyOf构造中使用它。
就像这样:
allOf:
- anyOf:
- $ref: "#/components/schemas/null_type"
- $ref: "#/components/schemas/your_ref"
- description: "optionally add other properties here..."
Run Code Online (Sandbox Code Playgroud)
在哪里:
schemas:
null_type:
title: "OpenAPI 3.0 null-type ref"
description: "for adding nullability to a ref"
enum: [null]
your_ref:
...
Run Code Online (Sandbox Code Playgroud)
做到这一点并不容易。甚至几乎不可能。您的选择:
关于这一点有一个很长的讨论,也许有一天会完成......
您可以使用x-oneOf和x-anyOf等供应商扩展。我已经采取了这种艰难的方式:您必须升级所有使用的“招摇工具”才能考虑到这些供应商的扩展。
就我而言,我们需要“仅”:
那是一年前的事了,也许现在……
很多项目不需要anyOf和oneOf,为什么我们不需要呢?
| 归档时间: |
|
| 查看次数: |
7505 次 |
| 最近记录: |