파라미터 allowEmptyValue 적용 범위 점검

allowEmptyValue의 적용 범위와 실제 빈 값 처리 정책을 확인하세요.

설명

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은 경로 직렬화 방식을 지정하며, 빈 정수 값을 허용한다는 뜻은 아닙니다.

참조