我的API使用Swagger OAS3进行记录。我有一个使用YAML定义的属性:
LoanAmount:
type: number
nullable: true
我可以从swagger导出的结果JSON看起来像:
"LoanAmount": {
"type": "number",
"nullable": true
},
当我使用jsonschemavalidator测试验证时,模式为:
{
"title": "A JSON Schema for OpenAPI 3.0.",
"id": "http://openapis.org/v3/schema.json#", "$schema":
"http://json-schema.org/", "type": "object",
"properties": {
"LoanAmount": {
"type": "number",
"nullable": true}
}
}
输入为:
{
"LoanAmount" : null
}
验证失败了
“无效的类型。预期的数字,但得到了空”
我可以使用以下方法完成这项工作:
"LoanAmount": {
"type": ["number","null"]
}
但是,我无法弄清楚如何使用OAS3 YAML以这种方式定义它。我的目标不是必须在swagger hub之外维护一个单独的模式,以满足我对API中许多字段的可空要求。
一个昂首阔步的文档page描述了OAS3“使用JSON Schema规范Wright Draft 00(又名草案5)的扩展子集来描述数据格式......”
Json.Net Schema文档说“支持100%的JSON Schema Draft 6并且与旧版本具有向后兼容性”
我的假设是OAS3可以为空的属性是扩展子集特性之一,而不是任何JSON模式草案的一部分,但我在继续之前寻找对此的确认。
OAS3使用JSON Schema关键字的子集超集。
见https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#data-types
OAS中的原始数据类型基于JSON模式规范Wright Draft 00支持的类型。请注意,也支持整数作为类型,并且定义为没有分数或指数部分的JSON数。 null不支持作为类型(对于替代解决方案,请参见nullable)。使用Schema Object定义模型,Schema Object是JSON Schema Specification Wright Draft 00的扩展子集。
确认。正在开展工作以允许在未来的OAS版本中充分使用JSON Schema!