# OpenAPI Code Generation Configuration # 基于YAML生成API代码的配置文件 ## Maven Plugin Configuration for Spring Boot # 在各个服务的pom.xml中添加以下插件配置: ```xml org.openapitools openapi-generator-maven-plugin 6.6.0 generate ${project.basedir}/../../openapi/specs/${project.artifactId}.yaml spring ${project.build.directory}/generated-sources/openapi com.datamate.${project.name}.interfaces.api com.datamate.${project.name}.interfaces.dto true true true true true java8 true true true springdoc ``` ## Gradle Plugin Configuration (Alternative) # 如果使用Gradle,可以使用以下配置: ```gradle plugins { id 'org.openapi.generator' version '6.6.0' } openApiGenerate { generatorName = "spring" inputSpec = "$rootDir/openapi/specs/${project.name}.yaml" outputDir = "$buildDir/generated-sources/openapi" apiPackage = "com.datamate.${project.name}.interfaces.api" modelPackage = "com.datamate.${project.name}.interfaces.dto" configOptions = [ interfaceOnly: "true", useTags: "true", skipDefaultInterface: "true", hideGenerationTimestamp: "true", java8: "true", dateLibrary: "java8", useBeanValidation: "true", performBeanValidation: "true", useSpringBoot3: "true", documentationProvider: "springdoc" ] } ``` ## Frontend TypeScript Client Generation # 为前端生成TypeScript客户端: ```bash # 安装 OpenAPI Generator CLI npm install -g @openapitools/openapi-generator-cli # 生成TypeScript客户端 openapi-generator-cli generate \ -i openapi/specs/data-annotation-service.yaml \ -g typescript-axios \ -o frontend/packages/api-client/src/generated/annotation \ --additional-properties=supportsES6=true,npmName=@datamate/annotation-api,npmVersion=1.0.0 ``` ## Usage in Services # 在各个服务中使用生成的代码: 1. **在 interfaces 层实现生成的API接口**: ```java @RestController @RequestMapping("/api/v1/annotation") public class AnnotationTaskController implements AnnotationTasksApi { private final AnnotationTaskApplicationService annotationTaskService; @Override public ResponseEntity getAnnotationTasks( Integer page, Integer size, String status) { // 实现业务逻辑 return ResponseEntity.ok(annotationTaskService.getTasks(page, size, status)); } } ``` 2. **在 application 层使用生成的DTO**: ```java @Service public class AnnotationTaskApplicationService { public AnnotationTaskPageResponse getTasks(Integer page, Integer size, String status) { // 业务逻辑实现 // 使用生成的DTO类型 } } ``` ## Build Integration # 构建集成脚本位置:scripts/build/generate-api.sh ```bash #!/bin/bash # 生成所有服务的API代码 OPENAPI_DIR="openapi/specs" SERVICES=( "data-annotation-service" "data-management-service" "operator-market-service" "data-cleaning-service" "data-synthesis-service" "data-evaluation-service" "pipeline-orchestration-service" "execution-engine-service" "rag-indexer-service" "rag-query-service" "api-gateway" "auth-service" ) for service in "${SERVICES[@]}"; do echo "Generating API for $service..." mvn -f backend/services/$service/pom.xml openapi-generator:generate done echo "All APIs generated successfully!" ```