引用OpenAPI 2.0, Schema Object或Swagger 2.0, Schema Object,discriminator
字段定义为:
添加对多态性的支持。鉴别器是用于区分继承此模式的其他模式的模式属性名称。使用的属性名称必须在此模式中定义,并且必须在
required
属性列表中。使用时,该值必须是此模式的名称或任何继承它的模式。
我的困惑/问题:
- 对我来说,它在继承或多态中究竟扮演什么角色是模棱两可的。有人可以
discriminator
用一个工作示例来解释它究竟做了什么,如果我们不使用它会怎样?任何错误、警告或任何依赖于它进行某些操作的工具? - 是不是swagger-editor不支持
discriminator
,而其他一些工具中使用了这个字段?
到目前为止我已经尝试过:
- 我尝试使用swagger-editor和同一文档中的示例(也在下面提到)来玩弄这个属性,看看我是否能看到它的任何特殊行为。我更改了属性,删除了它,并将
Dog
模型扩展到更深一层,并在新的子模型上尝试了相同的方法,但我在swagger-editor的预览中没有看到任何变化。 - 我尝试在线搜索,特别是stackoverflow问题,但没有找到任何相关信息。
我用来做实验的示例代码:
definitions:
Pet:
type: object
discriminator: petType
properties:
name:
type: string
petType:
type: string
required:
- name
- petType
Cat:
description: A representation of a cat
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
default: lazy
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Dog:
description: A representation of a dog
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
required:
- packSize