説明
OpenAPI 3.0 と 2.0 では、discriminator に使うプロパティーは必須である必要があります。required に含まれていないと、型の識別に必要な値がないオブジェクトを許可するスキーマになる場合があります。
想定される影響
- クライアントとサーバーが派生型を一貫して判別できなくなる可能性があります。
- 文書と実際のデータで必須条件が異なり、連携に失敗する場合があります。
対処方法
OpenAPI 3.0 の discriminator.propertyName または OpenAPI 2.0 の discriminator が指定するプロパティーを required に含めてください。合成スキーマの他の必須条件を維持し、実際のリクエストとレスポンスに値があるか確認してください。
例
OpenAPI 3.0 の親スキーマの抜粋です。派生スキーマ、多態性のための合成、info、paths は省略しています。変更前は name だけが必須で、型を区別する petType は必須ではありません。
変更前
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"GeneralError": {
"type": "object",
"discriminator": {
"propertyName": "petType"
},
"properties": {
"petType": {
"type": "string"
}
},
"required": [
"name"
]
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"GeneralError": {
"type": "object",
"discriminator": {
"propertyName": "petType"
},
"properties": {
"petType": {
"type": "string"
}
},
"required": [
"petType"
]
}
}
}
}
変更後は petType を必須にしています。同時に name を必須一覧から除いているため、実際の仕様で name も必要なら両方を維持してください。