# XY Swagger Generator 基于 Swagger/OpenAPI 的 Dart/Flutter API/模型代码生成工具。 [![Dart](https://img.shields.io/badge/Dart-3.0+-blue.svg)](https://dart.dev/) [![Flutter](https://img.shields.io/badge/Flutter-3.0+-blue.svg)](https://flutter.dev/) [![OpenAPI](https://img.shields.io/badge/OpenAPI-3.0+-green.svg)](https://spec.openapis.org/oas/v3.0.3/) ## ✨ 功能特性 ### 🚀 核心功能 - **完整的 OpenAPI 3.0 支持**:涵盖所有主要规范特性 - **高性能解析**:支持并行解析和流式处理大型文档 - **智能代码生成**:生成高质量的 Dart/Flutter 代码 - **模块化架构**:按 API 模块自动分组生成 ### 🎯 专为 Flutter 优化 - **Dio + Retrofit 集成**:完美适配主流网络架构 - **类型安全**:生成强类型的 API 接口和模型 - **JSON 序列化**:自动生成 json_serializable 代码 - **String 默认值**:自动为 String 类型字段添加默认值,提升容错性 - **文件上传支持**:完整的 multipart/form-data 支持 ### 🔧 高级特性 - **智能缓存**:提升重复操作性能 - **错误诊断**:详细的错误报告和修复建议 - **性能监控**:内置性能统计和优化 - **增量生成**:支持增量更新和变更检测 ## 📚 **文档和规范** ### **核心文档** - [**代码生成规范**](./AUGMENT_CODE_GENERATION_STANDARDS.md) - 完整的生成规范和最佳实践 - [**快速参考指南**](./QUICK_REFERENCE.md) - 常见问题和解决方案 - [**代码审查清单**](./CODE_REVIEW_CHECKLIST.md) - 质量保证检查清单 - [**生成器配置**](./generator_config.yaml) - 详细的配置选项 ### **设计原则** 1. **OpenAPI 3.0 标准优先** - 严格遵循规范,不进行主观推断 2. **与服务器保持一致** - swagger.json 是唯一真实来源 3. **有问题沟通文档** - 发现问题时要求完善后端文档 4. **类型安全第一** - 生成强类型代码,避免运行时错误 ## 🚀 快速开始 ### 📦 作为 dev_dependencies 使用(推荐) 本工具可以作为 `dev_dependencies` 集成到您的 Flutter/Dart 项目中: #### 1. 添加依赖 在您的项目 `pubspec.yaml` 中添加: ```yaml dev_dependencies: swagger_generator_flutter: git: url: https://github.com/your-org/swagger_generator_flutter.git ref: develop # 或使用本地路径(开发时) # swagger_generator_flutter: # path: ../swagger_generator_flutter ``` #### 2. 创建配置文件 复制 [`generator_config.template.yaml`](./generator_config.template.yaml) 到您的项目根目录,重命名为 `generator_config.yaml` 并修改配置。 #### 3. 执行代码生成 ```bash # 安装依赖 flutter pub get # 生成所有文件 dart run swagger_generator_flutter generate --all # 生成 .g.dart 文件 dart run build_runner build --delete-conflicting-outputs ``` 📖 **详细使用说明**:查看 [作为 dev_dependencies 使用指南](./USAGE_AS_DEV_DEPENDENCY.md) --- ### 💻 独立项目使用 如果您想直接在本项目中开发和测试: #### 1. 安装依赖 ```bash flutter pub get ``` #### 2. 基础用法(命令行) ```bash # 生成模型和API(推荐) sh run_swagger.sh all # 分别生成 sh run_swagger.sh api # 只生成 API sh run_swagger.sh models # 只生成模型 # 或直接使用 dart 命令 dart run bin/main.dart generate --models --api ``` ### 3. 编程式用法(推荐) ```dart import 'package:swagger_generator_flutter/swagger_generator_flutter.dart'; void main() async { // 使用高性能解析器 final parser = PerformanceParser( config: ParseConfig( enablePerformanceStats: true, enableParallelParsing: true, ), ); // 解析 OpenAPI 文档 final jsonString = await File('swagger.json').readAsString(); final document = await parser.parseDocument(jsonString); // 使用优化生成器 final generator = OptimizedRetrofitGenerator( className: 'ApiService', generateModularApis: true, generateBaseResult: true, generatePagination: true, generateFileUpload: true, ); // 生成代码 final generatedCode = generator.generateFromDocument(document); // 保存文件 await File('lib/api/api_service.dart').writeAsString(generatedCode); // 查看性能统计 final stats = parser.lastStats; print('解析时间: ${stats?.totalTime.inMilliseconds}ms'); print('生成的路径数: ${stats?.pathCount}'); } ``` ## 📖 详细配置 ### 生成器类型 #### 1. RetrofitApiGenerator(基础版) ```dart final generator = RetrofitApiGenerator( className: 'ApiService', // 生成的类名 splitByTags: true, // 是否按标签分割(默认启用) useRetrofit: true, // 使用 Retrofit 注解 generateModels: true, // 生成模型类 ); ``` #### 2. OptimizedRetrofitGenerator(推荐) ```dart final generator = OptimizedRetrofitGenerator( className: 'ApiService', generateModularApis: true, // 模块化 API generateBaseResult: true, // 基础响应类型 generatePagination: true, // 分页支持 generateFileUpload: true, // 文件上传 baseResultType: 'BaseResult', // 自定义基础类型 pageResultType: 'PageResult', // 自定义分页类型 ); ``` #### 3. PerformanceGenerator(高性能) ```dart final generator = PerformanceGenerator( maxConcurrency: 4, // 最大并发数 enableCaching: true, // 启用缓存 enableIncremental: true, // 增量生成 enableParallel: true, // 并行生成 ); ``` ### 解析器配置 ```dart final parser = PerformanceParser( config: ParseConfig( enableParallelParsing: true, // 并行解析 enableStreamParsing: false, // 流式解析 enableCaching: true, // 缓存 maxConcurrency: 4, // 最大并发数 enablePerformanceStats: true, // 性能统计 ), ); ``` ### 验证和错误处理 ```dart // 创建验证器 final validator = EnhancedValidator( strictMode: false, // 严格模式 includeWarnings: true, // 包含警告 ); // 验证文档 final isValid = validator.validateDocument(document); // 获取错误报告 final errorReport = validator.errorReporter.generateReport(); print(errorReport); ``` ## 📊 性能优化 ### 缓存策略 ```dart // 配置智能缓存 final cache = SmartCache( maxSize: 1000, // 最大缓存大小 strategy: CacheStrategy.smart, // 缓存策略 defaultTtl: Duration(hours: 1), // 默认过期时间 ); // 获取缓存统计 final stats = cache.getStats(); print('缓存命中率: ${(stats.hitRate * 100).toStringAsFixed(1)}%'); ``` ### 性能监控 ```dart // 获取解析性能统计 final parseStats = parser.lastStats; print('解析性能统计:'); print(' 总时间: ${parseStats?.totalTime.inMilliseconds}ms'); print(' 路径数: ${parseStats?.pathCount}'); print(' 吞吐量: ${parseStats?.bytesPerSecond.toStringAsFixed(2)} bytes/s'); ``` ## 📁 目录结构 ``` swagger_generator_flutter/ bin/ # 命令行入口 example/ # 使用示例 generator/ # 生成的 API、模型、文档 lib/ # 生成器核心代码 core/ # 核心模型和解析器 generators/ # 代码生成器 validators/ # 文档验证器 tests/ # 单元测试和集成测试 swagger.json # OpenAPI 源文件 ``` ## 运行测试 ```bash dart run test tests/ ``` ## 🎯 **规范遵循示例** ### **✅ 正确的生成结果** ```dart // 严格按照 swagger.json 定义生成 @POST('/api/v1/Login/userLogin') Future> userLogin( @Body() LoginRequest request // 仅当 swagger 中明确定义时 ); // 健康检查接口 @GET('/health') Future> healthCheck(); // 无明确 schema 的接口 @POST('/api/v1/Action/DoSomething') Future>> doSomething(); ``` ### **❌ 避免的错误做法** ```dart // 错误:生成不存在的类型 Future> someMethod(); // 错误:添加 swagger 中未定义的参数 @POST('/api/v1/GetUsers') Future>> getUsers( @Body() Map request // swagger 中没有定义 ); // 错误:基于关键词推断类型 if (path.contains('login')) return 'UserLoginResult'; ``` ## 贡献指南 - **严格遵循 [代码生成规范](./AUGMENT_CODE_GENERATION_STANDARDS.md)** - **使用 [代码审查清单](./CODE_REVIEW_CHECKLIST.md) 进行质量检查** - 代码需包含中英文注释 - 新增功能请补充对应测试用例 - 生成规则/命名风格如有特殊需求请在 issue 说明 ## 常见问题 - **生成的类型不存在?** 检查 swagger.json 中是否定义了对应的 schema - **接口缺少参数?** 确认 swagger.json 中是否有完整的参数定义 - **可空性不正确?** 检查 swagger.json 中的 nullable 字段设置 - 更多问题请参考 [快速参考指南](./QUICK_REFERENCE.md) ### 脚本命令说明 #### Linux/macOS (run_swagger.sh) ```bash # 显示帮助 ./run_swagger.sh help # 只生成数据模型 ./run_swagger.sh models # 只生成API文档 ./run_swagger.sh docs # 只生成Retrofit API ./run_swagger.sh api ``` #### Windows (run_swagger.bat) ```cmd # 显示帮助 run_swagger.bat help # 只生成数据模型 run_swagger.bat models # 只生成API文档 run_swagger.bat docs # 只生成Retrofit API run_swagger.bat api ``` --- 更新日期:2025-07-13 作者:Max