2

我正在为 API 定义 swagger 定义,并且遇到了这个用例。

请求和响应对象模型定义看起来完全一样。但是,对象中有一个字段在 get 操作期间返回更多枚举值,但限制为 put 操作的最小枚举值。是否可以有条件地为同一字段引用不同的枚举值,从而避免重复定义。为了克服这个限制,我不想为请求和响应重新创建整个模型定义。

这是我的例子,

definitions:
  EntryRequest:
    properties: 
      entries:
        $ref: '#/definitions/EntityResponse/properties/entries'
  EntryResponse:
    properties:
      entries:
        type: array
        items:
          $ref: '#/definitions/Entry'
  Entry:
    properties:
      entryStatus:
        type: string
        enum:
          - ENABLE
          - DISABLE
          - IN_PROGRESS

在上面,有两件事我担心。1) 对于 EntryRequest,API 只接受 ENABLE/DISABLE 进行 PUT 操作,而 API 在 GET 操作中返回所有这些。我想有条件地创建对 entryStatus 属性的引用。可能吗?2) 此外,对于 EntryRequest 和 EntryResponse 对象模型,除了 entryStatus 之外的所有内容都是相同的。为了表示 entryStatus 字段的区别,我也不想复制它。

有没有办法做到这一点?

编辑: 当我对此了解更多时,我觉得这更像是一个与 yaml 相关的查询。但是我想在这里看看是否有人遇到过类似的情况以及他们是如何处理的。或者看看我是否有任何关于如何处理这个问题的建议。为了将不同的枚举标记到同一个字段,我想我可以这样做,

RequestEntryStatus:
  type: string
  enum: &requestStatus
    - ENABLE
    - DISABLE

ResponseEntryStatus:
  type: string
  enum:  &responseStatus
    - ENABLE
    - DISABLE
    - IN_PROGRESS

Entry:
  properties:
    entryStatus: *requestStatus

但这仍然会强制我创建具有不同映射到 entryStatus 字段的请求和响应对象的副本。我想知道是否有更好的方法来处理这个问题。

4

1 回答 1

1

请求和响应对象模型定义看起来完全一样。但是,对象中有一个字段在 get 操作期间返回更多枚举值,但限制为 put 操作的最小枚举值。是否可以有条件地为同一字段引用不同的枚举值,从而避免重复定义。为了克服这个限制,我不想为请求和响应重新创建整个模型定义。

不,这是不可能的。

如果您想避免重复,您可以使用包含所有枚举值的单个模型,但口头记录description某些值仅用于响应而不是请求。

于 2017-04-11T19:32:12.393 回答