swagger_generator_flutter/docs/PROJECT_OVERVIEW.md

221 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# XY Swagger Generator - 项目概览
## 📋 项目简介
XY Swagger Generator 是一个专为 Flutter 开发优化的 OpenAPI 3.0 代码生成器,旨在自动化 API 接口和数据模型的生成过程,提升开发效率并确保代码质量。
### 🎯 设计目标
- **标准化优先**: 严格遵循 OpenAPI 3.0 规范,确保与后端 API 文档完全一致
- **类型安全**: 生成强类型 Dart 代码,在编译时发现潜在问题
- **高性能**: 支持大型 API 文档的高效解析和代码生成
- **企业级**: 提供完整的验证、缓存、监控和错误处理机制
## 🏗️ 核心架构
### 架构层次
```
命令行输入
SwaggerCLI / GenerateCommand编排流程
Pipeline (按职责分层)
- Parse: SwaggerDataParser (获取与解析)
- Validate: EnhancedValidator (校验)
- Generate: ModelCodeGenerator, RetrofitApiGenerator (生成)
- Render: TemplateRenderer (渲染)
- Output: GenerationOutputService (落盘)
Core (核心模型、配置、异常)
Utils (通用工具)
```
### 模块关系图(简化)
```mermaid
flowchart TD
CLI[CLI / main] --> GC[GenerateCommand]
GC --> Pipeline
subgraph Pipeline
direction LR
Parse[Parse] --> Validate[Validate]
Validate --> Generate[Generate]
Generate --> Render[Render]
Render --> Output[Output]
end
GC --> Core[Core Models, Config, Exceptions]
Pipeline --> Core
Pipeline --> Utils
```
## 模块职责与核心类
- Commands
- GenerateCommand: 解析参数、编排流程(解析→验证→生成→落盘)
- Pipeline
- Parse: `SwaggerDataParser` (获取与解析)
- Validate: `EnhancedValidator` (校验)
- Generate: `ModelCodeGenerator`, `RetrofitApiGenerator` (生成)
- Render: `TemplateRenderer` (渲染)
- Output: `GenerationOutputService` (落盘)
- Core
- `ConfigRepository`: 主配置入口
- `models`: 核心数据模型
- `exceptions`: 自定义异常
- `error_reporter`: 错误报告
- Utils
- `FileUtils`/`PathResolver`: 异步 IO、路径解析
- `ReferenceResolver`: $ref 解析与去循环
- `StringUtils`: 统一导出NamingConverter/TextCleaner/TemplateService
- Utils
- FileUtils/PathResolver: 异步 IO、路径解析
- ReferenceResolver: $ref 解析与去循环
- StringUtils: 统一导出NamingConverter/TextCleaner/TemplateService
## 代码生成流程(详细)
1) 读取配置
- 首选 ConfigRepository.loadSync()/load(),兼容 ConfigLoader
2) 获取与解析
- SwaggerFetcher 读取(网络/本地)→ CacheManager 命中 → SwaggerDataParser 解析
3) 校验
- SchemaValidator 执行基础校验 → EnhancedValidator 转换为结构化报告ErrorReporter
4) 数据准备
- 引用解析、模型依赖裁剪、版本/Tag 分组
5) 代码生成
- ModelCodeGenerator 产出 models
- RetrofitApiGenerator 产出 APITemplateRenderer + 模板)
6) 文件输出
- GenerationOutputService/ FileUtils 落盘,按版本/分类组织
7) 总结输出
- 生成 SUMMARY.md、日志摘要、耗时统计
## 最近重构变更(摘自 check_list
- 核心模型拆分为 models/ 子模块,路径支持 path+method 键,补齐 toJson
- GenerateCommand 拆出输出服务与调度,职责更清晰
- RetrofitApiGenerator 切换 Mustache 模板
- Validator 体系化ValidationRule/ContextEnhancedValidator 装饰器化
- 引入 ConfigRepositoryPathResolver 复用路径逻辑
- TypeValidator 规则化,复用 SchemaValidator 结果模型
- SwaggerFetcher 异步 IO + 内容哈希缓存
- FileUtils 全异步 API统一 PathResolver
- performance_parser 使用 Isolate.run 实现并行
- error_rules 迁移至 YAML/JSON 配置
- exceptions 拆分为 exceptions/ 子目录
- error_reporter 拆分为 data/reporter/rendererserror_reporter.dart 仅作为汇总导出
- StringUtils 拆分为 naming_converter/text_cleaner/template_service主文件为统一导出接口
### 核心组件
#### 1. 命令与配置
- **SwaggerCLI / GenerateCommand**: 注册命令、展示帮助、执行生成,支持多 Swagger 合并、版本化输出、Tag 过滤和忽略列表
- **ConfigLoader / SwaggerConfig**: 解析 `generator_config.yaml`,提供 swagger_urls 顺序合并、输出目录、版本提取正则、ApiClient 命名、BaseResult 导入等配置
#### 2. Pipeline (核心流程)
- **Parse**: `SwaggerDataParser` 支持 http(s) 与 file:// 源的 OpenAPI 解析,内置缓存与性能监测。
- **Validate**: `SchemaValidator``EnhancedValidator` 用于在生成前验证文档一致性。
- **Generate**: `ModelCodeGenerator``RetrofitApiGenerator` 负责生成数据模型和 API 代码。
- **Render**: `TemplateRenderer` (内部使用) 负责模板渲染。
- **Output**: `GenerationOutputService` 负责将生成的文件写入磁盘。
#### 5. 工具类 (Utils)
- **CacheManager / PerformanceMonitor**: 缓存解析结果并记录耗时
- **FileUtils / StringUtils**: 路径解析(基于配置文件目录)、命名转换、文件写入等
## 🔧 技术特性
### 生成行为
- 支持按顺序合并多个 `swagger_urls`,后者覆盖前者(适合 v1→v2 升级)
- 版本化输出路径按版本分目录v2+ 类名自动追加 `V2`/`V3` 后缀,统一 ApiClient 聚合各版本
- Tag 过滤与模型裁剪:`included_tags`/`excluded_tags` 与依赖分析确保只生成实际使用的模型
- 分页识别:检测 `total/items` 模式并替换为 `BasePageResult<T>`,包装在 `BaseResult`
- 查询参数实体GET 查询参数超过 4 个时自动生成 parameters 类,集中导出
- 忽略列表与相对路径:`ignored_directories/files` 控制落盘,路径基于配置文件所在目录解析
- BaseResult/BasePageResult 导入可配置,模型导出自动补全统一的 index.dart
### 质量保障
- 模型使用 `@JsonSerializable(checked: true, includeIfNull: false)`,字符串/非空列表默认值自动补齐(响应模型)
- Request/Response/Enums/Parameters 分类生成,分页模型避免重复定义
- 生成器提供基本语法校验与类型推断,保持 Dart 命名规范(类名 PascalCase字段 camelCase
- 文档生成器输出接口统计、控制器分组与示例,辅助对齐后端文档
### 性能与观测
- CacheManager 缓存解析结果,避免重复请求 Swagger 源
- PerformanceMonitor 记录获取/解析耗时,生成流程有摘要 (SUMMARY.md)
- 文件写入前统一检查跳过策略,目录按需创建,减少无效 IO
## 📊 性能与可观测性
- 解析层通过 PerformanceMonitor 记录获取/解析耗时,并复用 CacheManager 结果避免重复网络请求
- 多文档合并时会输出模型/路径统计与覆盖提示,便于确认版本覆盖关系
- 生成结束会输出 SUMMARY.md 与控制台摘要,包含控制器、路径、模型数量
- 文件写入前的跳过策略减少无意义的 IO提升重复生成时的稳定性
## 🎯 应用场景
### 适用项目类型
- **企业级 Flutter 应用**: 大量 API 接口,需要标准化管理
- **多人协作项目**: 需要统一的代码风格和开发规范
- **快速迭代项目**: API 变更频繁,需要快速同步
- **微服务架构**: 多个服务的 API 需要统一管理
### 团队规模
- **小型团队** (2-5人): 提升开发效率,减少重复工作
- **中型团队** (5-20人): 统一开发标准,提升协作效率
- **大型团队** (20+人): 企业级管理,确保代码质量和一致性
## 🚀 核心优势
### 1. 开发效率提升
- **自动化程度**: 95% 的 API 代码自动生成
- **开发时间节省**: 减少 70%+ 的 API 相关开发时间
- **错误率降低**: 类型相关错误减少 90%+
### 2. 代码质量保证
- **类型安全**: 编译时类型检查,避免运行时错误
- **标准一致**: 统一的代码风格和命名规范
- **文档同步**: API 文档与代码自动保持同步
### 3. 维护成本降低
- **变更响应**: API 变更响应时间从小时级降到分钟级
- **技术债务**: 标准化代码结构,易于维护和扩展
- **团队协作**: 统一的开发流程和代码规范
## 📈 发展路线
### 当前版本 (v2.1.x)
- ✅ dev dependency 场景的 CLI 入口与可执行别名
- ✅ 多 Swagger 顺序合并与版本化 API 输出
- ✅ Tag 过滤、忽略策略、BaseResult/BasePageResult 导入配置
- ✅ 示例项目与基础测试脚本tests/
### 后续计划
- 🔄 提升自动化测试覆盖与生成结果校验
- 🔄 完善配置校验与错误提示体验
- 🔄 持续同步 README/示例与最新生成逻辑
## 🤝 社区与支持
### 文档资源
- [项目主文档](../README.md)
- [使用指南](./USAGE_GUIDE.md)
- [API 参考文档](./API_REFERENCE.md)
- [快速参考](../QUICK_REFERENCE.md)
- [配置模板](../generator_config.template.yaml)
### 贡献方式
- 提交功能前运行 `dart run swagger_generator_flutter generate --all` 以及必要的 `build_runner`
- 在 Issue/PR 中附上配置片段与最小示例(可参考 example/
- 变更生成规则时同步更新 README 与 docs/
---
**项目维护者**: Max
**最后更新**: 2025-11-09
**文档版本**: v2.1