我有一个API,其中一个键的基本响应将具有一组标识符。用户可以传递一个额外的参数,这样数组就会从一个字符串数组变成一个对象数组(对于实际的细节,而不是必须进行单独的调用)。
"children": {
"type": "array",
"items": {
"oneOf": [{
"type": "string",
"description": "Identifier of child"
}, {
"type": "object",
"description": "Contains details about the child"
}]
}
},
有没有办法表明第一种类型是默认的,第二种是通过请求的参数?
答案 0 :(得分:0)
我并不完全清楚你要通过区别来实现什么。真的,这听起来像文件;也许在每个description
子模式的oneOf
中详细说明。
您可以在顶层添加一个额外的布尔字段(children
的兄弟),以指示是否返回详细响应并为该字段提供默认值。下一步是将布尔值与数组项的类型相结合,这是我使用oneOf
完成的。
我建议的内容如下:
{
"children": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string",
"description": "Identifier of child",
"pattern": "^([A-Z0-9]-?){4}$"
},
{
"type": "object",
"description": "Contains details about the child",
"properties": {
"age": {
"type": "number"
}
}
}
]
}
},
"detailed": {
"type": "boolean",
"description": "If true, children array contains extra details.",
"default": false
},
"oneOf": [
{
"detailed": {
"enum": [
true
]
},
"children": {
"type": "array",
"items": {
"type": "object"
}
}
},
{
"detailed": {
"enum": [
false
]
},
"children": {
"type": "array",
"items": {
"type": "string"
}
}
}
]
}
第二个oneOf
对响应对象提出了进一步的要求,当"detailed": true
"孩子&#34}的项目类型时数组必须是" object"。这改进了第一个oneOf
限制,该限制描述了" children"中对象的模式。阵列。