"Diskriminator" Polymorphismus, Open API 2.0 (Swagger 2.0)
Verweisen auf Open API 2.0, Schema-Objektoder Swagger 2.0, Schema-Objektund die definition von discriminator
Feld:
Fügt Unterstützung für Polymorphie. Der Diskriminator ist die schema-name der Eigenschaft, die verwendet wird, zu differenzieren zwischen anderen schema, dass die Erben dieses schema. Der name der Eigenschaft MUSS definiert werden, in diesem schema, und es MUSS in der
required
Eigenschaft Liste. Wenn verwendet, MUSS der Wert sein, den Namen von diesem schema oder ein schema, das erbt.
Meine Verwirrungen/Fragen:
- Es ist nicht eindeutig für mich, welche Rolle genau spielt es an der Vererbung oder Polymorphismus. Könnte jemand bitte erklären
discriminator
mit ein funktionierendes Beispiel zeigen, was es genau macht und was passiert, wenn wir es nicht verwenden? Alle Fehler, Warnungen oder keine Werkzeuge, hängt davon ab, es für einige Vorgänge? - Ist es der Fall, dass Fors-editor nicht unterstützen
discriminator
und dieses Feld wird verwendet, in einigen anderen tools?
Was ich bisher versucht habe:
- Habe ich versucht, Fors-editor und das Beispiel aus der gleichen Dokumentation (auch unten erwähnt), zu spielen, um mit dieser Eigenschaft zu sehen, ob ich sehen kann jeder seine speziellen Verhaltensweisen. Ich habe die Eigenschaft, entfernt es, und verlängern die
Dog
Modell um eine Ebene tiefer und versucht das gleiche auf dem neuen sub-Modell, aber ich sehe keine änderungen in der Vorschau von Fors-editor. - Ich habe versucht, online-Suche, und speziell stackoverflow-Fragen, fanden aber keine relevanten Informationen.
Der Beispiel-code, den ich verwendet, um zu tun versuche:
definitions:
Pet:
type: object
discriminator: petType
properties:
name:
type: string
petType:
type: string
required:
- name
- petType
Cat:
description: A representation of a cat
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
default: lazy
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Dog:
description: A representation of a dog
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
required:
- packSize
InformationsquelleAutor der Frage Musa | 2016-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß dieser google-Gruppe
discriminator
verwendet wird, auf der Oberseite desallOf
Eigenschaft und es ist definiert in der super-Typ für Polymorphismus. Wenndiscriminator
wird nicht verwendet, derallOf
Schlüsselwort beschreibt, dass ein Modell mit den Eigenschaften anderer Modelle für die Zusammensetzung.Nur wie in deinem Beispiel-code
Pet
ist ein super-Typ mit dem Eigentum derpetType
identifiziert alsdiscriminator
undCat
ist eine Unterkategorie vonPet
. Folgende json-Beispiel einerCat
Objekt:Den Einsatz von
discriminator
beabsichtigt, geben die Eigenschaft verwendet, um den Typ eines Objekts. Wird davon ausgegangen, dass es tools gibt, kann die richtige Unterstützung bei der definition von Objekten mit der Verwendung vondiscriminator
ist es möglich zu bestimmen, die Art durch das Scannen des Eigentums. Zum Beispiel, identifizieren Sie das Objekt einCat
nachpetType
.Jedoch die
discriminator
Feld ist nicht gut definiert, in der aktuellen version der Spezifikation oder Proben (siehe Ausgabe #403). Soweit ich weiß, gibt es keine tools zur Verfügung gestellt von Swagger richtig unterstützen es an der Zeit.discriminator
kann verwendet werden, wenn das Modell hat die Eigenschaft verwendet, um festzustellen, der Typ. In diesem Fall ist es natürlich passen, und es kann verwendet werden, als Indikator für andere Entwickler zu verstehen, der Polymorphismus Beziehung. Wenn third-party-tools wie ReDoc die Unterstützungdiscriminator
(siehepetType
in diesem gif und Beispiel) betrachtet wird, können Sie diese nützlich finden.InformationsquelleAutor der Antwort Wilson
Den Diskriminator-Funktionalität wurde stark verbessert im Open API 3. Sie bieten jetzt eine Diskriminator-Objekt enthält den Namen der Diskriminator-Eigenschaft, sowie eine Zuordnung der Werte der Eigenschaft Schemaname.
(Ich weiß Sie haben Fragen über Open API 2, aber das ist so viel verbessert in den 3, die Sie hoffentlich nutzen können).
Finden Sie unter: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#discriminatorObject für den eigentlichen spec
InformationsquelleAutor der Antwort nat k