Swagger 2.0: qual esquema aceitar qualquer valor JSON (complexo)
A API para a qual estou escrevendo uma especificação Swagger 2.0 é basicamente uma loja para qualquer valor JSON.
Eu quero um caminho para ler o valor e um caminho para armazenar quaisquer valores JSON (nulo, número, número inteiro, cadeia, objeto, matriz) de profundidade não predefinida.
Infelizmente, parece que o Swagger 2.0 é bastante rigoroso nos esquemas de entrada e saída e não permite todo o conjunto de esquemas permitido pelo esquema JSON. O editor Swagger não permite, por exemplo, valores mistos (por exemplo, uma propriedade que pode ser um booleano ou um número inteiro) ou matrizes vagamente definidas (o tipo de itens deve ser estritamente definido) e objetos.
Então, eu estou tentando uma solução alternativa, definindo umMixedValue
esquema:
---
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
Mas o Swagger Editor recusa as definições vagamente definidasobject
earray
propriedades.
Perguntas: - Existe uma maneira de solucionar esse problema? - É apenas um bug do Swagger Editor ou um forte limite das especificações do Swagger 2.0? - Existe uma maneira melhor (melhor prática) para especificar o que eu preciso? - Posso esperar algumas limitações no código produzido pelo swagger para alguns idiomas com minhas especificações de API?