必須指定のない discriminator プロパティー

discriminator に使うプロパティーを required に含め、値の存在を必須にしてください。

説明

OpenAPI 3.0 と 2.0 では、discriminator に使うプロパティーは必須である必要があります。required に含まれていないと、型の識別に必要な値がないオブジェクトを許可するスキーマになる場合があります。

想定される影響

  • クライアントとサーバーが派生型を一貫して判別できなくなる可能性があります。
  • 文書と実際のデータで必須条件が異なり、連携に失敗する場合があります。

対処方法

OpenAPI 3.0 の discriminator.propertyName または OpenAPI 2.0 の discriminator が指定するプロパティーを required に含めてください。合成スキーマの他の必須条件を維持し、実際のリクエストとレスポンスに値があるか確認してください。

例

OpenAPI 3.0 の親スキーマの抜粋です。派生スキーマ、多態性のための合成、info、paths は省略しています。変更前は name だけが必須で、型を区別する petType は必須ではありません。

変更前

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "discriminator": {
          "propertyName": "petType"
        },
        "properties": {
          "petType": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

変更後

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "discriminator": {
          "propertyName": "petType"
        },
        "properties": {
          "petType": {
            "type": "string"
          }
        },
        "required": [
          "petType"
        ]
      }
    }
  }
}

変更後は petType を必須にしています。同時に name を必須一覧から除いているため、実際の仕様で name も必要なら両方を維持してください。

参考資料