説明
オブジェクトスキーマの required は存在が必須のプロパティー名を指定し、properties は各値の形式や制約を定義します。必須名が同じ properties にないだけで仕様が矛盾するわけではありません。追加プロパティーが許可されていたり、allOf など別のスキーマで定義されていたりする場合があります。
想定される影響
必須フィールドの定義がどこにもないと、利用者が必要な値を判断しにくく、型の検証も不十分になる場合があります。逆に追加プロパティーを禁止し、必須名も許可しないと、条件を満たすオブジェクトを作れないことがあります。
対処方法
合成されたスキーマと additionalProperties を確認し、必要な型と制約を適切な位置に定義してください。実際の必須条件を維持し、同じ properties にないという理由だけで required から削除しないでください。
例
OpenAPI 3.0 のオブジェクトスキーマの抜粋です。info と paths は省略しています。変更前も name の存在は必須です。追加プロパティーを禁止していないため、この構造自体は矛盾していません。
変更前
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"Example": {
"type": "object",
"required": [
"name"
],
"properties": {
"age": {
"type": "integer"
}
}
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"Example": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
}
}
}
}
}
}
変更後は name の型を文字列に指定しています。存在条件に値の制約を加えるため、以前は有効だった他の型の値を拒否する場合があります。実際の仕様に合わせて選択してください。