【问题标题】:Schema validation for null values with OpenAPI (swagger) JSON schema definitions使用 OpenAPI (swagger) JSON 模式定义对空值进行模式验证
【发布时间】:2021-06-16 23:09:39
【问题描述】:

我正在寻找一种解决方案来解决 Swagger (OpenAPI) data types 和 JSON Schema 之间的数据类型处理空值的不兼容问题。

我们的 swagger 文件包含我们所有的架构定义,我想在我们的 API 测试中使用 JSON.Net Schema 进行架构验证步骤。

有效的 swagger 属性定义:

  "description": {
    "type": "string",
    "nullable": true
  }

空值的 JSON 架构验证将失败 (Invalid type. Expected String but got Null)。

如果我将可空属性定义替换为:

  "description": {
    "type": ["string", "null"]
  } 

null 值的验证会成功,但这会破坏swagger 语法。

Structural error at components.schemas.CalendarFunctionsDto.properties.description_EN.type
should be equal to one of the allowed values
allowedValues: array, boolean, integer, number, object, string

我找不到用于 .NET 的 OpenAPI 模式到 JSON 模式转换器。我试图弄清楚是否有一个简单的解决方案可以使用 JSON.Net Schema 来解决这个问题。我们的一些类型比上面的例子更复杂。我正在寻找一种适用于所有“可空”类型的解决方案。

理想情况下,我希望为输入保留有效的 swagger (OpenAPI 3.0) JSON 语法,以编程方式在 C# 中为所有可空属性执行一些拼写(转换架构,或调整验证,或任何其他创造性的解决方案),然后使用 JSON.Net Schema 验证架构。

【问题讨论】:

  • 欢迎您!看起来您正在询问有关图书馆的建议。这通常被认为是题外话。尝试确保以不要求图书馆推荐的方式表达您的问题。虽然我没有给你答案,但我已经呼叫了可能的人。祝你好运。

标签: json.net swagger jsonschema


【解决方案1】:

Openapi 3.0.0/3.0.1/3.0.2/3.0.3 不支持 null 类型,它只支持 nullable。 JSON Schema 不支持 nullable,它支持 null 类型。 你能把你的规范更新到 Openapi v3.1.0 吗? 该版本支持 null 类型。然后您可以使用以下选项之一:

选项 1(不太可能在 openapi 工具中工作,因为类型数组是新增功能)

  "description": {
    "type": ["string", "null"]
  } 

选项 2(更可能使用 openpi 工具,因为类型不是数组)

  "description": {
    "oneOf" [
        {"type": "string"},
        {"type": "null"},
    ]
  }

【讨论】:

  • 感谢您的回答。 Swagger 尚不支持 OpenAPI 3.1.0,我看到一个未解决的问题 (github.com/swagger-api/swagger-ui/issues/5891) 表明这可能最终会发生。我已经尝试过 `oneOf [..{"type": "null"},遗憾的是,正如您所说,“null”在 3.0.0 中不是有效类型。
猜你喜欢
  • 2015-06-07
  • 1970-01-01
  • 2017-01-09
  • 2021-06-02
  • 1970-01-01
  • 2014-10-16
  • 2020-09-06
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多