enumと追加のスキーマ制約の確認

列挙値とほかの制約を併せて確認し、実際に許可する値を明確にしてください。

説明

enumは値を明示した集合に限定します。minLengthやmaximumなどの制約と併用でき、値は適用されるすべての制約を満たす必要があります。列挙された値でも、ほかの制約に反すれば許可されません。

想定される影響

利用者がenumの一覧だけを見て拒否される値を送信したり、制約の組み合わせで許可される値がなくなったりする場合があります。

対処方法

意図した列挙値が型とすべての追加制約を満たすか確認してください。必要な規則を維持し、重複や誤りだけを整理してください。enumと並んでいるという理由だけで、有効な制約を削除しないでください。

例

OpenAPI 3.0スキーマの抜粋です。例の四つの文字列はすべて4文字以上で、minLength: 4とは矛盾しません。

変更前

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "Cat": {
        "type": "object",
        "properties": {
          "huntingSkill": {
            "type": "string",
            "enum": [
              "clueless",
              "lazy",
              "adventurous",
              "aggressive"
            ],
            "minLength": 4
          }
        }
      }
    }
  }
}

変更後

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "Cat": {
        "type": "object",
        "properties": {
          "huntingSkill": {
            "type": "string",
            "enum": [
              "clueless",
              "lazy",
              "adventurous",
              "aggressive"
            ]
          }
        }
      }
    }
  }
}

変更後は、すべての列挙値が既に満たす長さ制約を省略しています。許可する文字列の集合は同じで、変更前の構成が不正なわけではありません。

参考資料