【问题标题】:Why isn't the OAS3 nullable attribute recognized by the Newtonsoft Schema Validator?为什么 Newtonsoft Schema Validator 不能识别 OAS3 可为空的属性?
【发布时间】:2019-08-05 12:17:23
【问题描述】:

我的 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
}

验证失败

“无效的类型。预期的数字,但得到了 Null”

我可以使用:

"LoanAmount": {
"type": ["number","null"]
}

但是,我无法弄清楚如何使用 OAS3 YAML 以这种方式定义它。我的目标是不必在 swagger hub 之外维护一个单独的模式来满足我对 API 中许多字段的可空要求。

A swagger docs page 描述 OAS3“使用 JSON Schema Specification Wright Draft 00(又名 Draft 5)的扩展子集来描述数据格式......”

Json.Net Schema 文档说“支持 100% 的 JSON Schema Draft 6 并向后兼容旧版本”

我的假设是 OAS3 可空属性是扩展的子集功能之一,而不是任何 JSON 架构草案的一部分,但在继续之前我正在寻找对此的确认。

【问题讨论】:

  • 已确认。 nullable 不是 JSON Schema 关键字。

标签: json.net swagger jsonschema openapi


【解决方案1】:

OAS3 使用 JSON Schema 关键字的子集超集。

https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#data-types

OAS 中的原始数据类型基于 JSON Schema Specification Wright Draft 00。请注意,整数作为 type 也受支持,它被定义为一个 JSON 数字,没有 分数或指数部分。不支持 null 作为类型(请参阅 对于替代解决方案可以为空)。模型是使用定义的 Schema Object,它是 JSON Schema 的扩展子集 规范赖特草案 00。

确认。 正在开展工作以允许在未来版本的 OAS 中充分使用 JSON Schema!

【讨论】:

  • 这项工作现在已经从 OpenAPI 3.1 完成,它允许完整的 JSON Schema 草案 2020-12
猜你喜欢
  • 2015-04-05
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 2016-11-19
  • 2010-11-20
  • 2014-10-28
相关资源
最近更新 更多