DSL 생성 조건
이 라이브러리는 핸들러를 분석하고, DSL 인터페이스 구현체를 생성하고 있습니다.
현재는 KSP를 통해 클래스 및 함수의 심볼을 분석하고 있습니다.
이 파트에서는 심볼이 어떤 요소로 결정되어 DSL 구현체를 생성하는지 기술합니다.
핸들러 결정 조건
함수가 핸들러로 결정되는 경우에는 ApiSpec의 구현체를 생성하게 됩니다.
이 라이브러리에서는 Spring Web MVC의 Mapping Request에 기반하여 특정 함수를 핸들러로 결정하고 있고, 조건은 아래와 같습니다.
- 핸들러가 선언된 클래스에
@RestController@Controller어노테이션이 달려있어야 합니다. @RestController어노테이션이 달린 클래스의 함수인 경우 Spring의 요청 매핑 어노테이션이 달려있어야 합니다.@Controller어노테이션이 달린 클래스인 경우@ResponseBody어노테이션과 요청 매핑 어노테이션이 달려있어야 합니다.
컴포넌트 결정 조건
핸들러로 결정된 함수에 대해서 해당 함수의 어노테이션, 파라미터, 리턴타입을 분석하여 어떤 HTTP 컴포넌트인지 결정하게 됩니다.
결정된 각 요소는 HandlerElement구현체로 변환되며,
해당 구현체 타입에 따라 적절한 ApiComponent구현체에 ApiField타입의 멤버 프로퍼티로 선언됩니다.
컴파일 시점에 값을 확인할 수 없는 등의 제약되는 사항을 제외하고는 Spring Web MVC의 Handler Methods에 기반하여 컴포넌트를 결정하고 있습니다.