Массив объектов как входной параметр в swagger

Я пытаюсь описать следующий параметр сообщения в чванстве:

{
    "sources": [
        {
            "id": 101,
            "parentId": 201
        },{
            "id": 102,
            "parentId": 201
        },{
            "id": 102,
            "parentId": 202
        }
    ],
    "destinationId": 301,
    "param1": "value 1",
    "param2": "value 2",
}

Проблема в том, что sources - это массив объектов, который, похоже, не поддерживает чванство. Вот что я пробовал:

paths:
    /bulk-action:
        post:
            parameters:
                - name: sources
                  in: formData
                  type: array
                  enum:
                      $ref: '#/definitions/BulkSource'
                - name: destinationId
                  in: formData
                  type: integer
                - name: param1
                  in: formData
                  type: string
                - name: param2
                  in: formData
                  type: string
definitions:
    BulkSource:
        type: object
        properties:
            id:
                type: integer
            parentId:
                type: integer

Любая идея о том, как обойти это ограничение?


person maphe    schedule 21.09.2016    source источник


Ответы (1)


Если я правильно понимаю, ваше тело запроса на публикацию представляет собой объект json вместо form. В таком случае ваш документ swagger необходимо изменить следующим образом:

  1. Когда тело запроса представляет собой json, вместо нескольких параметров in: formData используется параметр с in: body.
  2. Если in равно body, требуется объект schema.
  3. Определены свойства json в разделе schema. Если свойство type равно array, требуется объект items.

Ниже приведен пример:

paths:
  /bulk-action:
    post:
      consumes:
        - application/json
      parameters:
        - name: body
          in: body
          schema:
            properties:
              sources:
                type: array
                items:
                  $ref: '#/definitions/BulkSource'
              destinationdId:
                type: integer
      responses:
        200:
          description: OK
definitions:
  BulkSource:
    type: object
    properties:
      id:
        type: integer
      parentId:
        type: integer
person Wilson    schedule 25.09.2016
comment
не могли бы вы сказать мне, где вы делаете эти изменения. Или то, что я хочу спросить, в каком файле написан приведенный выше код. Я не могу найти приведенный выше код в своем API swagger. - person K Pal; 01.03.2018
comment
Что делать, если массив моего тела запроса не имеет заголовка или имени, похожего на «Источники», присутствующие в теле OP???? У меня похожая проблема, только в моем теле запроса нет имени массива. Это больше похоже на [{ключ: значение, ключ: значение}, {ключ: значение, ключ: значение}] - person Rishikesh; 16.07.2018
comment
@ Ришикеш, ты понял, как это сделать? - person esh; 25.07.2018
comment
@esh Да, я понял, что это для OpenApi 3.0.1, вам просто нужно игнорировать заголовок или имя и продолжить с полем типа. Для 2.0 у меня до сих пор нет решения... - person Rishikesh; 26.07.2018
comment
@Wilson, не могли бы вы помочь мне с этим? я пытаюсь собрать массив форм в swaggerPHP, не знаю, как его определить, чтобы swagger мог его хорошо отображать, - person JSking; 05.07.2019
comment
@Rishikesh просто использует схему со ссылкой на объект типа массива: `-in: имя тела: схема параметров: $ref: #/definitions/ArrayObject определения: ArrayObject: тип: элементы массива: $ref: #/definitions/ArrayElement ` - person Roman Sinyakov; 15.10.2020