在OpenAPI/Swagger文件中声明日期的正确方法是什么?
在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
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定义日期/时间格式。使用模式解决了这个问题。