Являются ли идентичные пути с той лишь разницей, что один использует запрос, но разрешены другие параметры пути? - PullRequest
1 голос
/ 11 июня 2019

Моя проблема похожа на проблему, заданную в посте "Пути, которые отличаются только именами параметров запроса". Однако меня не интересуют идентичные пути, которые используют другой параметр запроса; вместо этого моя проблема связана с похожими путями, которые используют те же параметры, но принимают эти параметры как входные данные другим способом, один как параметры запроса, а другой как параметры пути.

Я попытался создать два разных пути в моем файле 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 голосов
/ 11 июня 2019

/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".
  • Дубликаты идентификаторов операций: "operationId": "super secret id".
...