추가 속성의 과도한 제한 (OpenAPI 3.0)

추가 속성 제한으로 API가 허용해야 하는 필드까지 거부하는 경우

설명

조합 스키마의 additionalProperties: false가 API에서 허용해야 하는 필드까지 차단하면 정상 데이터가 거부될 수 있습니다. 특히 allOf의 각 스키마는 다른 구성 스키마에서 정의한 속성을 자동으로 자신의 속성으로 인정하지 않습니다.

잠재적 영향

정상 요청이나 응답이 검증에 실패해 클라이언트와 서버의 연동이 깨질 수 있습니다. 다만 oneOf나 anyOf를 사용한다는 이유만으로 추가 속성을 허용해야 하는 것은 아닙니다.

해결 방법

각 구성 스키마가 받아야 하는 필드를 확인하고 속성 정의나 조합 구조를 수정하세요. 의도적으로 확장 필드를 받는 경우에만 추가 속성을 허용하고, 허용한 값도 필요에 따라 제한하세요.

예시

다음 OpenAPI 3.0 발췌 예시는 MyObject가 id와 name 외의 확장 필드를 받아야 한다는 가정하에 추가 속성을 허용합니다. 그런 요구가 없다면 변경 전의 닫힌 객체 스키마도 유효합니다.

변경 전

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "MyObject": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": { "type": "string" },
              "name": { "type": "string" }
            },
            "additionalProperties": false
          }
        ]
      }
    }
  }
}

변경 후

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "MyObject": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": { "type": "string" },
              "name": { "type": "string" }
            },
            "additionalProperties": true
          }
        ]
      }
    }
  }
}

참조