swagger Open API Spec V2.0 -枚举类型字段的默认值

pw136qt2  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(103)

我有一个Swagger V2.0中的API规范的请求体,如下所示。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      $ref: '#/definitions/StatusEnum'

  StatusEnum:
    type: string
    enum: ['ALPHA', 'BRAVO', 'UNKNOWN']

现在,我希望StatusObject.status的默认值为UNKNOWN,如果它不是从客户端设置的话。我试图做到这一点如下,没有运气。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      $ref: '#/definitions/StatusEnum'
      default: 'UNKNOWN'

  StatusEnum:
    type: string
    enum: ['ALPHA', 'BRAVO', 'UNKNOWN']

我也试过'#/definitions/StatusEnum.UNKNOWN',它也没有工作。我也梳理了一下文档,但没有找到更多的东西。我错过了什么?

标记重复响应

我试图实现的是为这个属性status设置一个默认值。这在枚举按如下方式行定义时有效。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      type: string
      enum:
        - 'ALPHA'
        - 'BRAVO'
        - 'UNKNOWN'
      default: 'UNKNOWN'

但是,这对我不起作用,因为我想重用枚举,否则我将不得不在多个地方重复。

mzmfm0qo

mzmfm0qo1#

由于这只是一个解决方案,我不确定我是否可以确认这是否是一个答案,我不会将其标记为接受的答案。这样,我认为它仍然会为那些找到正确方法的人开放,或者更好的方法来实现期望。
问题出在$ref上。众所周知,$ref的兄弟在OpenAPI V2.0中被忽略。因此,一旦使用$ref,就不可能再强制执行任何进一步的约束。
对于我的特定用例,因为我想重用我的枚举定义,所以我使用了V2.0文档中定义的YAML Anchors。尽管枚举定义在每个POJO中重复,但管理起来并不那么麻烦,至少目前是这样。我提出的实现如下。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      enum: *STATUS_ENUM # Referencing the anchor
      default: 'UNKNOWN'

  StatusEnum:
    type: string
    enum: &STATUS_ENUM # This is the anchor
      - 'ALPHA'
      - 'BRAVO'
      - 'UNKNOWN'

还必须注意,在这种情况下,枚举值不能使用数组语法定义(即,['ALPHA', 'BRAVO', 'UNKNOWN']),因为当你尝试使用YAML锚时,它会违反YAML语法规则。

fumotvh3

fumotvh32#

OpenAPI 3.1支持default$ref,例如

status:
    $ref: '#/definitions/StatusEnum'
    default: 'UNKNOWN'

使用OpenAPI 3.0,您可以使用allOf,例如

status:
    allOf:
      - $ref: '#/definitions/StatusEnum'
      - default: 'UNKNOWN'

相关问题