Swagger 2.0: по какой схеме принимать любое (сложное) значение JSON
API, для которого я пишу спецификацию Swagger 2.0, является хранилищем для любого значения JSON.
Я хочу, чтобы путь для чтения значения и путь для хранения любых значений JSON (ноль, число, целое число, строка, объект, массив) с предопределенной глубиной.
К сожалению, кажется, что Swagger 2.0 довольно строг в отношении схем для ввода и вывода и не допускает весь набор схем, разрешенных JSON Schema. Редактор Swagger не допускает, например, смешанные значения (например, свойство, которое может быть либо логическим, либо целочисленным) или свободно определенные массивы (тип элементов должен быть строго определен) и объекты.
Итак, я пытаюсь обойти, определивMixedValue
схема:
---
swagger: '2.0'
info:
version: 0.0.1
title: Data store API
consumes:
- application/json
produces:
- application/json
paths:
/attributes/{attrId}/value:
parameters:
- name: attrId
in: path
type: string
required: true
get:
responses:
'200':
description: Successful.
schema:
$ref: '#/definitions/MixedValue'
put:
parameters:
- name: value
in: body
required: true
schema:
$ref: '#/definitions/MixedValue'
responses:
responses:
'201':
description: Successful.
definitions:
MixedValue:
type: object
properties:
type:
type: string
enum:
- 'null'
- boolean
- number
- integer
- string
- object
- array
boolean:
type: boolean
number:
type: number
integer:
type: integer
string:
type: string
object:
description: deep JSON object
type: object
additionalProperties: true
array:
description: deep JSON array
type: array
required:
- type
Но Swagger Editor отказывается от слабо определенногоobject
а такжеarray
свойства.
Вопросы: - Есть ли способ обойти эту проблему? - Это просто ошибка редактора Swagger или сильное ограничение спецификации Swagger 2.0? - Есть ли лучший способ (лучшая практика), чтобы указать, что мне нужно? - Могу ли я ожидать некоторые ограничения в коде, создаваемом swagger для некоторых языков с моей спецификацией API?