我正在定义一个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仅接受PUT操作的ENABLE / DISABLE,而API在GET操作中返回所有这些操作。我想有条件地创建对entryStatus属性的引用。可能吗? 2)此外,除EntryStatus之外的所有内容对于EntryRequest和EntryResponse对象模型都是相同的。我不想为了表示entryStatus字段的区别而复制它。
有办法吗?
修改 随着我对此的了解越来越多,我感觉这更像是一个与yaml相关的查询。但是我想在这里看看是否有人遇到过类似的情况以及他们是如何处理的。或者看看我是否得到了关于如何处理这个问题的任何建议。 为了将不同的枚举标记到同一个字段,我想我可以这样做,
RequestEntryStatus:
type: string
enum: &requestStatus
- ENABLE
- DISABLE
ResponseEntryStatus:
type: string
enum: &responseStatus
- ENABLE
- DISABLE
- IN_PROGRESS
Entry:
properties:
entryStatus: *requestStatus
但是这仍然会强制我创建具有与entryStatus字段不同映射的请求和响应对象的副本。我想知道是否有更好的方法来解决这个问题。
答案 0 :(得分:0)
请求和响应对象模型定义看起来完全相同。但是,对象中有一个字段在get操作期间返回更多枚举值,但限制了put操作的最小枚举值。 是否可以有条件地为同一字段引用不同的枚举值,从而避免重复定义。我不想为了克服此限制而重新创建请求和响应的整个模型定义。
不,这是不可能的。
如果您想避免重复,可以使用包含所有枚举值的单个模型,但在description
中口头记录某些值仅用于响应但不用于请求。