Swagger 2.0: qué esquema aceptar cualquier valor JSON (complejo)
La API para la que estoy escribiendo una especificación Swagger 2.0 es básicamente una tienda para cualquier valor JSON.
Quiero una ruta para leer el valor y una ruta para almacenar cualquier valor JSON (nulo, número, entero, cadena, objeto, matriz) de profundidad no predefinida.
Desafortunadamente, parece que Swagger 2.0 es bastante estricto en los esquemas de entrada y salida y no permite todo el conjunto de esquemas permitidos por el esquema JSON. El editor Swagger no permite, por ejemplo, valores mixtos (por ejemplo, una propiedad que puede ser booleana o entera) o matrices poco definidas (el tipo de elementos debe estar estrictamente definido) y objetos.
Así que estoy intentando una solución definiendo unMixedValue
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
Pero el Editor Swagger rechaza lo poco definidoobject
yarray
propiedades.
Preguntas: - ¿Hay alguna forma de solucionar este problema? - ¿Es solo un error del Editor Swagger o un límite fuerte de la especificación Swagger 2.0? - ¿Hay una mejor manera (mejor práctica) para especificar lo que necesito? - ¿Puedo esperar algunas limitaciones en el código producido por swagger para algunos idiomas con mi especificación API?