OpenAPI 2.0、スキーマオブジェクト 、または Swagger 2.0、スキーマオブジェクト の参照、およびdiscriminator
フィールドの定義:
ポリモーフィズムのサポートを追加します。識別子は、このスキーマを継承する他のスキーマを区別するために使用されるスキーマプロパティ名です。使用するプロパティ名はこのスキーマで定義する必要があり、
required
プロパティリストになければなりません。使用する場合、値はこのスキーマまたはそれを継承するスキーマの名前でなければなりません。
私の混乱/質問:
discriminator
を説明し、それが正確に何をするのか、それを使用しない場合はどうなるのかを示す実例で説明してもらえますか?エラー、警告、または操作に依存するツールはありますか?discriminator
をサポートせず、このフィールドは他のいくつかのツールで使用されていますか?私がこれまでに試したこと:
Dog
モデルを1レベル深く拡張し、新しいサブモデルで同じことを試みましたが、 swagger-エディター 。実験に使用したサンプルコード:
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
これによると、 google group 、discriminator
はallOf
プロパティの上で使用され、ポリモーフィズムのスーパータイプで定義されます。 discriminator
が使用されていない場合、allOf
キーワードは、モデルに構成用の他のモデルのプロパティが含まれていることを示します。
サンプルコードと同じように、Pet
はpetType
のプロパティがdiscriminator
として識別されるスーパータイプであり、Cat
はPet
。以下は、Cat
オブジェクトのjsonの例です。
{
"petType": "Cat",
"name": "Kitty"
}
discriminator
の使用は、オブジェクトのタイプを識別するために使用されるプロパティを示すことを意図しています。 discriminator
を使用して定義オブジェクトを適切にサポートできるツールがあると仮定すると、プロパティをスキャンすることでタイプを判別できます。たとえば、Cat
に従ってオブジェクトがpetType
であることを識別します。
ただし、discriminator
フィールドは、現在のバージョンの仕様またはサンプルで十分に定義されていません( issue#4 を参照)。私の知る限り、現時点ではSwaggerが適切にサポートしているツールはありません。
モデルにタイプを決定するために使用されるプロパティがある場合、discriminator
を使用できます。この場合、自然に適合し、他の開発者が多型関係を理解するための指標として使用できます。 ReDoc のようなdiscriminator
をサポートするサードパーティツール(この gif および example のpetType
を参照)が考えてみると、これは役に立つかもしれません。
OpenApi 3では弁別器の機能が大幅に改善されました。弁別器プロパティの名前を含む弁別器オブジェクトと、そのプロパティの値のスキーマ名へのマッピングを提供するようになりました。
(OpenApi 2について尋ねたことがありますが、これは3で大幅に改善されているので、うまく利用できれば幸いです)。
参照: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#discriminatorObject 実際の仕様について