필수 지정이 없는 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도 필요하면 두 이름을 모두 유지하세요.

참조