OpenAPI 2.0 の enum と追加制約の整合性の確認

enum と併用する制約が意図した許容値と一致するか確認してください。

説明

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 を削除しています。どちらのスキーマも同じ値を許可します。

参考資料