Пути, отличающиеся только именами параметров запроса

Я использую редактор swagger для документирования существующего API, который позволяет пути поддерживать два разных запроса, которые отличаются только именами параметров запроса. Например:

swagger: '2.0'
info:
  title: example
  version: 1.0.0
host: example.com
schemes:
  - http
basePath: /WS
paths:
  /Login:
    post:
      summary: Login
      description: |
        Log in
      parameters:
        - name: UserID
          in: query
          description: User ID
          required: true
          type: string
        - name: Password
          in: query
          description: User password
          required: true
          type: string
      responses:
        '200':
          description: Success
  /Login:
    post:
      summary: Login
      description: |
        Log in
      parameters:
        - name: UserID
          in: query
          description: User ID
          required: true
          type: string
        - name: Token
          in: query
          description: Authentication token
          required: true
          type: string
      responses:
        '200':
          description: Success

Здесь я поддерживаю запросы к http://example.com/WS/Login?UserID=foo&Passoword=bar и http://example.com/WS/Login?UserID=foo&Token=dubdu22r8dwjgd767dg.

Редактор swagger не показывает никаких ошибок для приведенного выше yaml, но создает документацию только для второго пути (того, который имеет параметры запроса UserId и Token), а не для обоих. Может ли кто-нибудь указать, где я ошибаюсь? Спасибо.

Изменить:

Если я изменю второй путь /Login: на (например) /Login1:, то я увижу оба пути в документации. Хотя не решение.

Мне также приходит в голову, что я мог бы указать один путь /Login: с обязательным параметром UserID и необязательными параметрами Password и Token. Но как указать, что должен быть указан ровно один из UserID и Password?


person Andy Johnson    schedule 18.09.2015    source источник
comment
Связанный (или дубликат): Как определить взаимоисключающие параметры запроса в Swagger (OpenAPI)?   -  person Helen    schedule 09.03.2018


Ответы (1)


Вместо этого вы можете использовать параметры пути, попробуйте:

swagger: '2.0'
info:
  title: example
  version: 1.0.0
host: example.com
schemes:
  - http
basePath: /WS
paths:
  /Login?UserID={id}&Password={password}:
    post:
      summary: Login
      description: Log in
      parameters:
        - name: id
          in: path
          description: User ID
          required: true
          type: string
        - name: password
          in: path
          description: User password
          required: true
          type: string
      responses:
        '200':
          description: Success
  /Login?UserID={id}&Token={token}:
    post:
      summary: Login
      description: Log in
      parameters:
        - name: id
          in: path
          description: User ID
          required: true
          type: string
        - name: token
          in: path
          description: Authentication token
          required: true
          type: string
      responses:
        '200':
          description: Success
person Saúl Martínez Vidals    schedule 18.09.2015
comment
Да, это была проблема: я не включил параметры запроса в пути. Не могу поверить, что я пропустил это! Спасибо за вашу помощь! - person Andy Johnson; 21.09.2015
comment
Это недействительная спецификация Swagger 2.0. Параметры запроса не разрешены в путях. - person Helen; 15.11.2016