説明
OpenAPI 2.0 では enum と minimum、maxLength などの制約を併用でき、すべての制約が適用されます。重複した制約は保守を複雑にし、矛盾する制約は enum に列挙した値も許可しない場合があります。
想定される影響
- enum の変更時に別の制約を見落とすと、許可するはずの入力が拒否される可能性があります。
- 同じ許容範囲を複数の場所に記述すると、文書と実装の整合性を保ちにくくなります。
対処方法
enum と他の制約を合わせて確認してください。削除しても許容値が変わらない重複制約だけを削除し、必要な制約は残してください。変更したスキーマで意図した値が許可されることを確認し、サーバー側の入力検証も合わせてください。
例
以下の id の各値は minimum を満たし、name の各値は maxLength 以内です。definitions の一部を抜粋しています。
変更前
json
{
"definitions": {
"Category": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"enum": [2, 3, 4, 5, 6]
},
"name": {
"type": "string",
"maxLength": 10,
"enum": ["Foo", "Bar"]
}
}
}
}
}
変更後
json
{
"definitions": {
"Category": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"enum": [2, 3, 4, 5, 6]
},
"name": {
"type": "string",
"enum": ["Foo", "Bar"]
}
}
}
}
}
変更後は、これらの enum 値に対して重複する minimum と maxLength を削除しています。どちらのスキーマも同じ値を許可します。