如何重用swagger 2.0字符串模式定义?

时间:2018-08-15 04:10:48

标签: swagger swagger-2.0

我在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

1 个答案:

答案 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$