我在swagger 2.0“定义”部分中定义了以下内容。我首先定义了时间戳的格式,该时间戳将在许多对象的属性中出于不同的目的使用,例如创建的时间戳和最后更新的时间戳。
definitions:
TimeStamp:
title: Timestamp format
description: ISO 8681, "2016-08-18T17:33:00Z"
type: string
pattern: \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z
Application:
title: An application
type: object
properties:
cDtm:
title: Creation timestamp
description: Some description
type: string
pattern:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z
但是,当定义“应用程序”对象的“ cDtm”属性时,我找不到重用时间戳定义的方法。如果将“ $ ref”与“ title”和“ description”一起使用,则会收到警告“不允许在$ ref旁边使用同级值”。如果我不使用“ $ ref”,则需要重复上述类型和模式定义。
所以,我的问题是,有没有一种方法可以使用$ ref重用字符串模式定义,但仍然能够给已定义的属性一个新的标题和描述?
谢谢!
Bing
答案 0 :(得分:3)
OpenAPI规范为此格式包含内置的format: date-time
,因此您实际上不需要这里的pattern
。而是使用:
type: string
format: date-time
如果由于某种原因您想坚持使用pattern
,则可以使用以下解决方法。基本上,如果将$ref
包装到$ref
中,则可以将属性“添加”到allOf
。在Swagger编辑器和Swagger UI中可以使用,但是其他工具支持可能会有所不同。
Application:
title: An application
type: object
properties:
cDtm:
title: Creation timestamp
description: Some description
allOf:
- $ref: '#/definitions/TimeStamp'
还要记住,pattern
在默认情况下是部分匹配。要强制完全匹配,请将模式表达式括在^..$
中:
pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$