在OpenAPI/Swagger文件中声明日期的正确方法是什么?

在OpenAPI/Swagger文件中声明日期的正确方法是什么?,swagger,openapi,Swagger,Openapi,在swagger文件对象中声明日期的正确方法是什么?我认为这是: startDate: type: string description: Start date example: "2017-01-01" format: date 但我看到很多这样的声明: startDate: type: string description: Start date example: "2017-01-01" format: date

在swagger文件对象中声明日期的正确方法是什么?我认为这是:

  startDate:
    type: string
    description: Start date
    example: "2017-01-01"
    format: date
但我看到很多这样的声明:

  startDate:
    type: string
    description: Start date
    example: "2017-01-01"
    format: date
    pattern: "YYYY-MM-DD"
    minLength: 0
    maxLength: 10
谢谢。

说明您必须使用:

类型:字符串 格式:日期#或日期时间

支持的模式在(有效的ISO 8601)中定义,示例在第5.8节中提供。因此,对于
日期
值应类似于“2018-03-20”,对于
日期时间
,“2018-03-20T09:12:28Z”。因此,当使用
日期
日期时间
时,
模式
是不必要的,事实上应该省略

如果需要支持以不同于RFC 3339的方式格式化的日期/时间,则不允许将参数指定为
格式:日期
格式:日期时间
。相反,您应该使用适当的
模式指定
格式:string

最后,请注意,
“YYYY-MM-DD”
模式
根据规范无效:
模式
必须是正则表达式,而不是占位符或格式字符串

如果您违反了上述任何规则来处理从OpenAPI规范生成UIS的bug,那么您应该强烈地考虑用该工具来提高这些bug,而不是生成一个无效的OpenAPI规范来解决这个问题。

模式应该是正则表达式。这一点在报告中有所说明

模式(根据ECMA 262正则表达式方言,该字符串应该是有效的正则表达式)

这是因为OpenAPI对象基于JSON模式规范

OpenAPI 2.0:该对象基于JSON模式规范草案4,并使用 它的预定义子集

OpenAPI3.0:该对象是JSON模式规范的扩展子集

如果web服务公开的日期或日期时间不符合中所述的Internet日期/时间格式,则日期和日期时间对于格式字段无效。属性必须定义为具有等于字符串的类型,而不使用格式。相反,模式可以用来给出定义日期或日期时间模式的正则表达式。这允许客户端工具自动解析日期或日期时间


我还建议将格式放在“描述”字段中,以便人类消费者可以更轻松地阅读它。

在打开的API文件中声明日期的正确示例:

    properties:
      releaseDate:
        type: date
        pattern: /([0-9]{4})-(?:[0-9]{2})-([0-9]{2})/
        example: "2019-05-17"

指定
模式
对于文档用户界面(如Swagger)最终用户很有用,因为格式
日期
没有明确显示(与
日期-时间
相反)。是否有办法只提及时间?如果API不接受OpenAPI支持/建议的格式的日期,该怎么办。您会更改API或规范吗?。我将更改规范并使用模式,而不是更改API签名。因此,人们使用模式,或者只是在描述中提供模式。一个人应该严格遵守为日期时间定义的格式,该格式可以在显示时本地化为客户端格式,但对于API,应该使用标准的Internet日期/时间格式。为OpenAPI规范定义的格式是标准的Internet日期/时间格式。但是,您可能会发现未编写或无权访问的web服务不符合标准。在这些情况下,您仍然需要能够使用OpenAPI定义日期/时间格式。使用模式解决了这个问题。