Подтвердить что ты не робот

Swagger 2.0: как указать входной параметр типа 'object'

Использование Swagger 2.0 Я пытаюсь указать входной параметр объекта типа:

фрагмент кода:

paths:
  '/thingies/{thingy_id}.json':
    put:
      summary: Update an existing thingy
      description: Updates an existing thingy
      parameters:
        - name: thingy_id
          description: ID of the thingy to update
          in: path
          required: true
          type: integer
        - name: translation
          description: Name and Locale for new translation
          in: formData
          type: object
          properties:
            name:
              type: string
            locale:
              type: string

Однако валидатор жалуется на часть type: object.

Как правильно указать мои входные параметры?

4b9b3361

Ответ 1

Хорошо, благодаря входу от @ron я разработал решение. Да, мне нужно использовать body вместо formData, но даже тогда он не подтвердил, жалуясь на type: object. Но если я сначала определю объект, а затем $ref, тогда все это сработает. Следующий код выполняет проверку.

swagger: '2.0'
info:
  version: '1'
  title: Thingy Service
  description: Everyone loves their thingy
schemes:
  - http
consumes:
  - application/json
produces:
  - application/json

definitions:
  localisation:
    type: object
    required:
      - name
      - locale
    properties:
      name:
        type: string
      locale:
        type: string

paths:
  '/thingies/{thingy_id}.json':
    put:
      summary: Update an existing thingy
      description: Updates an existing thingy
      parameters:
        - name: thingy_id
          description: ID of the thingy to update
          in: path
          required: true
          type: integer
        - name: translation
          description: Name and Locale for new translation
          in: body
          schema:
            $ref: '#/definitions/localisation'
      responses:
        204:
          description: No data
        404:
          description: Thingy not found

Ответ 2

Swagger позволяет вводить объекты только в качестве параметров тела.

Причина этого связана с тем, как сериализуется контент, который зависит от заголовка Content-Type (produces в Swagger). Этот заголовок относится к полезной нагрузке в целом.

При передаче параметров формы вы должны использовать один из двух типов mime: multipart/form-data или application/x-www-form-urlencoded. Хотя первая позволяет вам указать тип mime для каждой части, Swagger в настоящее время не поддерживает такое определение. Там есть открытый билет, чтобы разрешить его в будущей версии спецификации.

В настоящее время при задании параметров формы вы можете указать только примитивы или массивы примитивов.