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

Are identical paths with the only difference that one uses query but the other path parameters allowed?

我的问题与 "Paths that differ only in query parameter names" post 中的问题类似。但是,我对使用不同查询参数的相同路径不感兴趣;相反,我的问题是关于使用相同参数但以不同方式将这些参数作为输入的相似路径,一个作为查询参数,另一个作为路径参数。

我尝试在我的 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 文件中尝试做的事情是否被允许?

/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} 后相同的路径。


至于为什么 "it did not work",在不知道具体什么地方不起作用的细节的情况下,可能是因为您的 swagger.json 无效 JSON 并且也不是有效的 OpenAPI 定义。请使用 JSON 验证器(例如 https://jsonlint.com) and in Swagger Editor (https://editor.swagger.io)对其进行验证。一些错误是:

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