2017-09-27 1 views
1

Ich definiere eine API und ich habe ein Feld, das "Nutzlast" genannt wird. Wir hatten dieses Feld definiert alsLassen Sie ein Objekt OneOf einige Typen in Swagger haben

„Typ“: string

in unserer Prahlerei jedoch diese Nutzlast-Datenstruktur zu haben begonnen. Insbesondere sendet der Client JSON-Objekte als Nutzdaten, die in einigen Regeln beachtet werden müssen. Zum Beispiel könnte Nutzlast sein:

{ 
    "bark": true, 
    "breed": "Dingo" 
} 

wenn die Nutzlast ein Dog-Objekt ist oder

{ 
    "hunts": true, 
    "age": 13 
} 

wenn es ein Cat-Objekt ist.

So in der YAML-Datei Ich habe zunächst:

payload: 
     $ref: "#/definitions/payloaddata" 

und im Bereich Definitionen ich habe:

payloaddata: 
    type: "object" 
    schema: 
     oneOf: 
     - $ref: '#/components/schemas/Cat' 
     - $ref: '#/components/schemas/Dog' 

Die Komponenten werden wie folgt definiert:

components: 
    schemas: 
    Dog: 
     type: object 
     properties: 
     bark: 
      type: boolean 
     breed: 
      type: string 
      enum: [Dingo, Husky, Retriever, Shepherd] 
    Cat: 
     type: object 
     properties: 
     hunts: 
      type: boolean 
     age: 
      type: integer 

jedoch die Yaml-Datei "kompiliert" nicht mit dieser Eingabe. Irgendwelche Ideen wie man das macht?

+0

Ist Ihre Spezifikation OpenAPI/Swagger 2.0 oder OpenAPI 3.0? 'oneOf' wird nur in 3.0 unterstützt. – Helen

+0

hinzugefügt swagger: "3.0" am Anfang der Datei. Ich arbeite an editor.swagger.io – cateof

+0

Ist es irgendwie möglich, in 2.0 zu bleiben und einem Parameter zu erlauben, mehrere Typen als Wert zu haben? editor.swagger dot io unterstützt nicht "3.0" – cateof

Antwort

1

oneOf wird in OpenAPI 3.0, aber nicht in OpenAPI/Swagger 2.0 unterstützt. Der von Ihnen gepostete Code ist in Ordnung, solange Ihre Spezifikation openapi: 3.0.0 statt swagger: '2.0' angibt. Möglicherweise müssen Sie auch einige andere Dinge in Ihrer Spezifikation ändern, z. #/definitions/ ->#/components/schemas/... und so.

+0

Ich habe * viel * zu viel Zeit verbracht, bis ich diese Antwort gefunden habe ... Danke! –

Verwandte Themen