是否允许相同的路径具有唯一的区别,即一个路径使用查询但其他路径参数?

时间:2019-06-11 19:08:20

标签: json swagger swagger-2.0

我的问题类似于“仅查询参数名称不同的路径”一文中的问题。但是,我对使用不同查询参数的相同路径不感兴趣。相反,我的问题是有关使用相同参数但以不同方式将这些参数作为输入的相似路径,一个作为查询参数,另一个作为路径参数。

我尝试使用在swagger.json文件中创建两个不同的路径,一个包含它们作为查询参数,另一个包含它们作为路径参数,但是没有用。请在下面查看我的代码:

  '''swagger.json 
 { 
  // swagger initialisation
  "paths":{
    "foo_b_ar/{foo}/{bar}":{
      "get":{
        "summary":"foo foo"
        "operationId": "super secret id"
        "produces":[
          "someName/json"
         ],
        "parameters":[ 
        { 
         "name" = "foo",
         "in" = "path",
         "description" = "something",
         "required" = true,
         "type" = "string"
        },
        { 
         "name" = "bar",
         "in" = "path",
         "description" = "something2",
         "required" = true,
         "type" = "string"
        }
        ], 
        "responses":{ 
              // something not relevant
        } } },
    "foo_b_ar":{
      "get":{
       "summary":"foo foo"
       "operationId": "super secret id"
       "produces":[
        "someName/json"
       ],
       "parameters":[ 
        { 
         "name" = "foo",
         "in" = "query",
         "description" = "something",
         "required" = true,
         "type" = "string"
        },
        { 
         "name" = "bar",
         "in" = "query",
         "description" = "something2",
         "required" = true,
         "type" = "string"
        }
       ], 
       "responses":{ 
         // something not relevant
       } } }
     }

我的问题是,是否允许我在swagger.json文件中尝试执行的操作?

1 个答案:

答案 0 :(得分:0)

/foo_b_ar/foo_b_ar/{foo}/{bar}(注意前导/-路径名中必需)是不同的路径。

/foo_b_ar/smth/other/foo_b_ar/{foo}/{bar}也是不同的路径,如果使用前一个(具体的)定义应该首先匹配。

相同路径的示例:

  • /{foo}/{bar}
  • /foo_b_ar/{foo}/foo_b_ar/{bar}
  • /foo_b_ar/{foo}/{bar}/foo_b_ar/{param1}/{param2}
  • /foo_b_ar/{foo}/something/foo_b_ar/{bar}/something
  • /foo_b_ar/something/{foo}/foo_b_ar/something/{bar}

也就是说,相同的路径是如果您从其中删除了{parameters}的路径。


至于为什么“它不起作用”,而又不知道确切什么不起作用以及在什么地方不起作用的细节,可能是因为您的swagger.json是无效的JSON也是无效的OpenAPI定义。请使用JSON验证程序(例如https://jsonlint.com)和Swagger编辑器(https://editor.swagger.io)对其进行验证。一些错误是:

  • JSON中的对象字段之间缺少逗号。
  • 无效的键/值分隔符(由=代替:)。
  • 在路径的开头缺少/"foo_b_ar"不是有效的路径,它必须是"/foo_b_ar"
  • 重复的操作ID:"operationId": "super secret id"