説明
組み合わせたスキーマで additionalProperties: false がAPIで許可すべきフィールドまで遮断すると、正常なデータも拒否される可能性があります。特に allOf の各スキーマは、ほかの構成スキーマで定義されたプロパティを自分の定義として自動的に認識しません。
想定される影響
正常なリクエストやレスポンスが検証に失敗し、クライアントとサーバーの連携ができなくなる可能性があります。ただし、oneOf や anyOf を使うという理由だけで追加プロパティを許可する必要はありません。
対処方法
各構成スキーマが受け入れるべきフィールドを確認し、プロパティの定義やスキーマの組み合わせ方を修正してください。拡張フィールドを意図的に受け入れる場合に限って追加プロパティを許可し、必要に応じて値も制限してください。
例
次のOpenAPI 3.0の抜粋では、MyObject が id と name 以外の拡張フィールドを受け入れる必要があると仮定して、追加プロパティを許可しています。その要件がなければ、変更前の閉じたオブジェクトスキーマも有効です。
変更前
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"MyObject": {
"oneOf": [
{
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" }
},
"additionalProperties": false
}
]
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"components": {
"schemas": {
"MyObject": {
"oneOf": [
{
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" }
},
"additionalProperties": true
}
]
}
}
}
}