假设在我的OpenAPI v3描述中,我有以下/componenets/schemas
条目(使用YAML(格式:
WidgetTypes:
type: string
enum:
- WIDGET_A
- WIDGET_B
- WIDGET_C
因此,WidgetTypes
模式是一个命名的(即值$ref
(枚举"类"。在API规范的其他地方,我们现在可以引用这些枚举值,例如,可能存在API路径,其中一个路径元素必须来自WidgetTypes
集合。
现在,我还有一些额外的模式(即对象数据模型(,可能存在特定于的WidgetType
值是该对象类型的常量的情况。一个例子:
MySpecificWidgetA:
type: object
properties:
someField1:
type: string
someField2:
type: number
widgetType:
type: string
enum:
- WIDGET_A
这感觉像是实现这一点的天真方法,因为现在MySpecificWidgetA
的widgetType
字段是一个来自可能的WidgetType
的集合的字符串,,但没有实际引用WidgetType
来强制执行这一点。在精神上,我想断言的是MySpecificWidgetA.widgetType
是WidgetType
枚举模式(在本例中为WIDGET_A
(中的特定值。只使用$ref: '#/components/schemas/WidgetType'
可以通过验证,但不能实现我想要的:它声明widgetType
只是来自该集合的一个值。。。我希望它是该集合中的受限值(即常数(。
我尝试过用$ref
测试widgetType
的其他几种方法,包括(但没有成功(:
$ref: '#/components/schemas/WidgetType/WIDGET_A'
$ref: '#/components/schemas/WidgetType/enum/WIDGET_A'
$ref: '#/components/schemas/WidgetType/enum/0'
(最后一个不是很有用,只是测试了$ref
使用的JSON指针格式。(
以上尝试均未通过OpenAPI v3验证。。。有人知道是否可以从定义的枚举模式元素中引用(通过$ref
或其他机制(特定于的值吗?
JSON架构不允许这样做。$ref
只允许解析为其他模式对象,而不允许解析为单个数据点。