如何在OpenAPI中为相同的HTTP状态代码定义不同的响应(Swagger)?

如何在OpenAPI中为相同的HTTP状态代码定义不同的响应(Swagger)?,swagger,openapi,Swagger,Openapi,我正在为现有的API编写OpenAPI规范。此API返回成功和失败的状态200,但响应结构不同 例如,在注册API中,如果用户成功注册,API将发送状态200,其中包含以下JSON: { "result": true, "token": RANDOM_STRING } { "result": false, "errorCode": "00002", // this code is duplicated error "errorMsg": "duplica

我正在为现有的API编写OpenAPI规范。此API返回成功和失败的状态200,但响应结构不同

例如,在注册API中,如果用户成功注册,API将发送状态200,其中包含以下JSON:

{
    "result": true,
    "token": RANDOM_STRING
}
{
    "result": false,
    "errorCode": "00002", // this code is duplicated error
    "errorMsg": "duplicated account already exist"
}
如果存在重复的用户,API也会发送状态200,但会使用以下JSON:

{
    "result": true,
    "token": RANDOM_STRING
}
{
    "result": false,
    "errorCode": "00002", // this code is duplicated error
    "errorMsg": "duplicated account already exist"
}

在这种情况下,如何定义响应?

这在OpenAPI 3.0中是可能的,但在2.0中是不可能的

OpenAPI 3.0支持为响应指定备用模式的
oneOf
。您还可以添加多个响应
示例
,例如成功响应和失败响应。自v以来,Swagger UI支持多个
示例。3.23.0

openapi:3.0.0
...
路径:
/一些东西:
获取:
响应:
'200':
描述:结果
内容:
应用程序/json:
模式:
其中一项:
-$ref:“#/components/schemas/apireultok”
-$ref:“#/components/schemas/apireult”
示例:
成功:
摘要:成功响应的示例
价值:
结果:正确
代币:abcde12345
错误:
摘要:错误响应的示例
价值:
结果:错误
错误代码:“00002”
errorMsg:“重复的帐户已存在”
组件:
模式:
阿皮雷托克:
类型:对象
特性:
结果:
类型:布尔型
枚举:[对]
代币:
类型:字符串
必修的:
-结果
-代币
恐怖:
类型:对象
特性:
结果:
类型:布尔型
枚举:[错误]
错误代码:
类型:字符串
示例:“00002”
错误消息:
类型:字符串
示例:“重复的帐户已存在”
在OpenAPI/Swagger 2.0中,每个响应代码只能使用一个模式,因此您最多只能将不同的字段定义为可选字段,并在模型
说明
或操作
说明
中记录它们的用法

昂首阔步:“2.0”
...
定义:
结果:
类型:对象
特性:
结果:
类型:布尔型
代币:
类型:字符串
错误代码:
类型:字符串
错误消息:
类型:字符串
必修的:
-结果

您没有为不同的响应使用不同的响应代码的具体原因是什么?我是已经存在的api的构建文档。我无法编辑api,因为有很多api,现在应用程序使用api。在swaggerhub和其他swagger文件渲染器中,可能没有正确渲染此api的副本。它没有在声明的特定响应代码中引用正确的模式。它只是显示了一个空白响应,没有使用声明的模式,@iamjoshua current Swagger UI为
oneOf
anyOf
模型生成示例,但您可以通过提供自定义
示例
示例
来解决这个问题,如我的回答所示。如果与其他渲染器工具有问题,考虑向工具供应商提交错误报告。