설명
OpenAPI 3.0의 allowEmptyValue는 query 파라미터에만 유효하며, 값을 직렬화할 수 없는 스타일에서는 적용되지 않습니다. 명세에서도 이 속성의 사용을 권장하지 않습니다. 설정만으로 모든 파라미터가 빈 값을 받아들인다고 볼 수는 없습니다.
잠재적 영향
- API 사용자가 빈 값을 보낼 수 있다고 오해할 수 있습니다.
- 문서와 서버의 입력 규칙이 다르면 요청 실패나 테스트 혼선이 발생할 수 있습니다.
해결 방법
path 등 적용 대상이 아닌 파라미터에서 allowEmptyValue를 제거하세요. 빈 값과 파라미터 생략을 구분해 허용 정책을 명확히 정하고, 값의 스키마 및 직렬화 방식과 일치시키세요. 클라이언트 요청과 서버 검증으로 실제 처리를 확인하세요.
예시
다음 예제는 경로의 정수 id를 설명합니다. 이 파라미터는 allowEmptyValue의 적용 대상이 아닙니다.
변경 전
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API overview",
"version": "1.0.0"
},
"paths": {
"/{id}": {
"get": {
"operationId": "listVersionsv2",
"summary": "List API versions",
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"examples": {
"foo": {
"value": {
"versions": [
{
"status": "CURRENT",
"updated": "2011-01-21T11:33:21Z",
"id": "v2.0",
"links": [
{
"href": "http://127.0.0.1:8774/v2/",
"rel": "self"
}
]
}
]
}
}
}
}
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"description": "ID of the API version",
"required": true,
"allowEmptyValue": true,
"schema": {
"type": "integer"
}
}
]
}
}
}
변경 후
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API overview",
"version": "1.0.0"
},
"paths": {
"/{id}": {
"get": {
"operationId": "listVersionsv2",
"summary": "List API versions",
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"examples": {
"foo": {
"value": {
"versions": [
{
"status": "CURRENT",
"updated": "2011-01-21T11:33:21Z",
"id": "v2.0",
"links": [
{
"href": "http://127.0.0.1:8774/v2/",
"rel": "self"
}
]
}
]
}
}
}
}
}
}
}
},
"parameters": [
{
"in": "path",
"style": "label",
"description": "ID of the API version",
"required": true,
"schema": {
"type": "integer"
},
"name": "id"
}
]
}
}
}
변경 후에는 경로 파라미터에서 allowEmptyValue를 제거합니다. style: label은 경로 직렬화 방식을 지정하며, 빈 정수 값을 허용한다는 뜻은 아닙니다.