2017-01-13 10 views
0

Невозможно получить, как использовать ссылку типа строки с значениями перечисления в параметре массива. Я могу сделать ссылку в ключе элементов, и она работает, но ошибка Swagger создает ошибку: неверное определение параметраSwagger 2: используйте ссылку enum в параметре запроса типа массива

Веб-интерфейс UI генерирует интерфейс, но он имеет текстовое поле вместо множительного блока, которое я ожидал.

Каков правильный способ?

Мой код:

swagger: '2.0': 
    paths: 
     /test: 
     get: 
      parameters: 
      - in: origin 
      name: status 
      description: Origin 
      required: false 
      schema: 
       type: array 
       items: 
       $ref: '#/definitions/Origin' 
      collectionFormat: pipes' 
    definitions: 
     Origin: 
     type: string 
     description: Campaign origin 
     enum: 
      - one 
      - two 
    externalDocs: 
     description: Find out more about Swagger 
     url: http://swagger.io 
    host: virtserver.swaggerhub.com 
    basePath:/

ответ

1

параметры массива с items, содержащие $ref являются notsupported в OpenAPI/Swagger 2.0. Но это выглядит как this will be possible в следующей версии 3.0. На данный момент существует несколько обходных решений, см. Ниже.

Ваша спецификация также имеет некоторые другие вопросы:

  • in: origin не является действительным. Ключевое слово in указывает местоположение параметра (путь, запрос, заголовок и т. Д.) И принимает только определенные значения в соответствии с спецификацией OpenAPI/Swagger. Я думаю, вы имели в виду in: query или in: header.

  • (ошибки или копипаст?)
  • Опечатки: swagger: '2.0': имеет дополнительный : в конце и collectionFormat: pipes' имеет дополнительный ' в конце.


Одно из решений, имеющих параметр массива, содержащий значения перечислений, чтобы определить перечислимую инлайн:

 parameters: 
     - in: query 
      name: status 
      description: Origin 
      required: false 
      type: array 
      collectionFormat: pipes 
      items: 
      type: string 
      enum: 
       - one 
       - two 

Другое решение (найдено here) заключается в использовании YAML якоря для ссылки на перечисление. Это особенность YAML, где вы можете пометить ключ &anchor-name, а затем в дальнейшем использовать *anchor-name, чтобы указать значение этого ключа.

definitions: 
    Origin: 
    type: string 
    description: Campaign origin 
    enum: &origin 
     - one 
     - two 

paths: 
    /test: 
    get: 
     parameters: 
     - in: query 
      name: status 
      description: Origin 
      required: false 
      type: array 
      collectionFormat: pipes 
      items: 
      type: string 
      enum: *origin