Swagger 2.0: Welches Schema soll ein (komplexer) JSON-Wert akzeptieren?
Die API, für die ich eine Swagger 2.0-Spezifikation schreibe, ist im Grunde ein Speicher für jeden JSON-Wert.
Ich möchte einen Pfad zum Lesen von Werten und einen Pfad zum Speichern von JSON-Werten (Null, Zahl, Ganzzahl, Zeichenfolge, Objekt, Array) mit nicht vordefinierter Tiefe.
Leider scheint es, dass Swagger 2.0 bei den Ein- und Ausgabeschemata ziemlich streng ist und nicht alle von JSON Schema zugelassenen Schemas zulässt. Der Swagger-Editor erlaubt zum Beispiel keine gemischten Werte (zum Beispiel eine Eigenschaft, die entweder ein Boolescher oder ein ganzzahliger Wert sein kann) oder lose definierte Arrays (der Elementtyp muss streng definiert sein) und Objekte.
So versuche ich eine Problemumgehung, indem ich ein @ definieMixedValue
schema:
---
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
Aber der Swagger Editor lehnt das lose definierteobject
undarray
Eigenschaften
Fragen: - Gibt es eine Möglichkeit, dieses Problem zu umgehen? - Handelt es sich nur um einen Swagger Editor-Fehler oder um ein starkes Limit der Swagger 2.0-Spezifikation? - Gibt es eine bessere Methode (Best Practice), um anzugeben, was ich brauche? - Kann ich mit Einschränkungen bei Code rechnen, der von swagger für einige Sprachen mit meiner API-Spezifikation erstellt wurde?