Swagger 大摇大摆根据可选参数指定两个代码相同的响应

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代码,但查看器将它们压扁,好像我只指定了一个一样 有办法做到这一点吗 编辑:以下

这个问题不是()的重复,因为OP试图返回200或400

我有一个带有可选参数的
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转义“=”符号,因此除非 您可以在生成的代码中修复此问题。可能它发生在其他代码中 发电机
  • 如果您有更多的查询参数,它将添加一个额外的“?”并失败
如果这些不是拦截器,它至少允许您正确地记录此类案例,并允许使用swagger editor进行测试

OpenAPI 2.0 OAS2不支持每个状态代码有多个响应模式。您只能有一个模式,例如,一个自由形式的对象(
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这是一个(或者说是未实现的)招摇过市用户界面的功能。我更新了答案并添加了解决方法。这不是有效的规范-路径中不允许查询参数,它们必须在
参数下定义。现有建议允许在路径中使用查询字符串:,