带有空格的swagger-codegen和$ ref属性

问题描述

我目前正在研究使用我们的swagger文件,该文件主要用于生成客户端SDK的文档。

我注意到我们的swagger文件(采用swagger 2.0 json格式)包含对这样的定义的引用:

"$ref":"#/deFinitions/My%20Awesome%20Object"

当我生成C#SDK时,这会转换为看起来像这样的代码

ApiResponse<My20Awesome20Object>

从swagger文件删除%20可以解决此问题,但与Web后端人员交谈,他们说它在那里,因为否则它将无法验证,我找不到引用,但是我记得我在swagger-codegen页面中找到了一个引用,该引用指出$ ref字段应为URI编码,因此似乎是正确的。

我目前的计划是做一个简单的脚本,只剥离%20以生成对类的正确引用。但这似乎是一个丑陋的解决方法。您是否有任何建议如何在获得正确代码的同时以符合标准的更好方式解决此问题?

干杯, 马库斯

解决方法

$refare URIs。之所以有%20是因为definitions部分中的模式名称包含空格,如下所示:

"definitions": {
  "My Awesome Object": {    // <---   $ref: "#/definitions/My%20Awesome%20Object"
    "type": "object",...
  }
}

某些工具在处理模式名称中的非字母数字字符时遇到问题;其中包括空格< >«‎ »等。也许这就是为什么OpenAPI 3.0将有效组件名称限制为A-Z a-z 0-9 - . _的原因。

最好的解决方法是从$ refs中删除%20,并从definitions部分的模式名称中删除空格。这样,如果/当您迁移到较新的OpenAPI版本时,架构名称将与OpenAPI 3.0正向兼容。