설명
ID나 코드처럼 형식이 정해진 문자열은 길이 제한만으로 유효한 값을 구분할 수 없습니다. 필요한 pattern 제약이 없으면 형식에 맞지 않는 값도 스키마를 통과할 수 있습니다. 자유 형식의 문자열에 정규식이 항상 필요한 것은 아닙니다.
잠재적 영향
서버도 해당 형식을 검증하지 않으면 잘못된 값이 후속 처리 오류를 일으킬 수 있습니다. 문서와 구현의 입력 기준이 달라질 수도 있습니다.
해결 방법
실제 허용 형식에 맞는 pattern을 정의하고 서버 검증과 일치시키세요. 이미 enum 등으로 필요한 형식을 제한하는 경우에는 같은 제약을 중복해서 추가할 필요가 없습니다.
예시
다음 OpenAPI 3.0 발췌 예시는 code와 message가 모두 소문자 영문자와 숫자로 이루어진 15자리 코드라는 가정하에 패턴을 추가합니다. 일반적인 자유 형식 메시지에 적용할 규칙은 아닙니다.
변경 전
json
{
"components": {
"schemas": {
"GeneralError": {
"properties": {
"code": {
"type": "string",
"maxLength": 15
},
"message": {
"type": "string",
"maxLength": 15
}
}
}
}
}
}
변경 후
json
{
"components": {
"schemas": {
"GeneralError": {
"properties": {
"code": {
"type": "string",
"maxLength": 15,
"pattern": "^[0-9a-z]{15}$"
},
"message": {
"type": "string",
"maxLength": 15,
"pattern": "^[0-9a-z]{15}$"
}
}
}
}
}
}