Swagger 大摇大摆根据可选参数指定两个代码相同的响应
这个问题不是()的重复,因为OP试图返回200或400 我有一个带有可选参数的Swagger 大摇大摆根据可选参数指定两个代码相同的响应,swagger,swagger-2.0,Swagger,Swagger 2.0,这个问题不是()的重复,因为OP试图返回200或400 我有一个带有可选参数的GET;e、 例如,GET/endpoint?selector=foo 我想返回一个200,其模式根据是否传递了参数而不同,例如: GET /endpoint -> {200, schema_1} GET /endpoint?selector=blah -> {200, schema_2} 在yaml中,我尝试使用两个200代码,但查看器将它们压扁,好像我只指定了一个一样 有办法做到这一点吗 编辑:以下
GET
;e、 例如,GET/endpoint?selector=foo
我想返回一个200,其模式根据是否传递了参数而不同,例如:
GET /endpoint -> {200, schema_1}
GET /endpoint?selector=blah -> {200, schema_2}
在yaml中,我尝试使用两个200代码,但查看器将它们压扁,好像我只指定了一个一样
有办法做到这一点吗
编辑:以下内容似乎相关:我想要同样的东西,我想出了一个似乎可行的解决办法: 我刚刚定义了两条不同的路径:
/path:
(...)
responses:
200:
description: Sucesso
schema:
$ref: '#/definitions/ResponseOne'
(...)
/path?parameter=value:
(...)
responses:
200:
description: Sucesso
schema:
$ref: '#/definitions/ResponseTwo'
(...)
路径在swagger编辑器中起作用。我甚至可以以不同的方式记录每个选项,并将仅在第二种情况下的可选参数放在一起,使API文档更干净。使用operationId可以为生成的API方法生成更干净的名称
我在这里发布了相同的解决方案()以验证我是否遗漏了更多内容
我确实理解没有明确允许/鼓励它这样做(我也没有发现任何地方明确禁止它)。但作为一种解决方法,并且是在当前规范中记录具有这种行为的API的唯一方法,看起来是一种选择
我发现了两个问题:
- Java代码gen URL转义“=”符号,因此除非 您可以在生成的代码中修复此问题。可能它发生在其他代码中 发电机
- 如果您有更多的查询参数,它将添加一个额外的“?”并失败李>
type:object
,不带properties
)
OpenAPI 3.0
在OAS3中,您可以使用oneOf
为同一操作定义多个可能的请求主体或响应主体:
openapi:3.0.0
...
路径:
/路径:
获取:
响应:
'200':
描述:成功
内容:
应用程序/json:
模式:
其中一项:
-$ref:“#/components/schemas/ResponseOne”
-$ref:“#/components/schemas/responsewo”
但是,无法将特定响应模式映射到特定参数值。您需要在响应、操作和/或参数的说明中口头记录这些细节
这里有一个可能相关的增强请求:
对于Swagger UI用户的注意事项:在撰写本文(2018年12月)时,Swagger UI不会自动为oneOf
和anyOf
模式生成示例。您可以跟踪更新
作为解决方法,您可以手动指定响应示例
或示例
。请注意,使用多个示例需要Swagger UI 3.23.0+或Swagger Editor 3.6.31+
响应:
'200':
描述:成功
内容:
应用程序/json:
模式:
其中一项:
-$ref:“#/components/schemas/ResponseOne”
-$ref:“#/components/schemas/responsewo”
示例:#Swigger在OpenAPI 3上吗?@Tommy:“Swigger”是许多项目的总称-Swigger编辑器、Swigger UI等。你指的是哪个项目?似乎“Swigger规范”已被重命名为“OpenAPI规范”,根据这一点,我不知道,谢谢:@Helen我已将上述内容实现到Swigger中,但我在文件中没有看到任何回应。当然,如果您指定两个可能的响应,它会在文档中同时显示它们吗?否则,该功能有什么意义?或者我遗漏了什么?@BenCarey这是一个(或者说是未实现的)招摇过市用户界面的功能。我更新了答案并添加了解决方法。这不是有效的规范-路径中不允许查询参数,它们必须在参数下定义。现有建议允许在路径中使用查询字符串:,