swagger_generator_flutter/example/README.md

331 lines
7.4 KiB
Markdown
Raw 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.

# Swagger Generator Flutter - 示例应用
这是一个完整的示例应用,展示如何在 Flutter 项目中使用 `swagger_generator_flutter` 作为 `dev_dependencies` 来生成 API 代码。
## 📋 项目说明
本示例应用使用 [Petstore API](https://petstore3.swagger.io) 作为演示,展示完整的代码生成流程。
## 🚀 快速开始
### 1. 安装依赖
```bash
# 使用 flutter 命令
flutter pub get
# 或使用 Makefile
make install
```
### 2. 生成 API 代码
#### 方式 1: 使用脚本(推荐)
**macOS/Linux:**
```bash
chmod +x generate_api.sh
./generate_api.sh
```
**Windows:**
```cmd
generate_api.bat
```
#### 方式 2: 使用 Makefile
```bash
# 生成并构建
make build
# 或分步执行
make generate # 生成 API 代码
make build # 运行 build_runner
```
#### 方式 3: 手动执行命令
```bash
# 1. 生成 API 代码
dart run swagger_generator_flutter generate --all
# 2. 生成序列化代码
dart run build_runner build --delete-conflicting-outputs
# 3. 格式化代码
dart format lib/generated
```
### 3. 运行应用
```bash
# 使用 flutter 命令
flutter run
# 或使用 Makefile
make run
```
## 📁 项目结构
```
example_app/
├── lib/
│ ├── common/ # 公共类
│ │ ├── api_response.dart # 通用响应包装
│ │ └── paged_response.dart # 分页响应包装
│ ├── generated/ # 生成的代码(自动生成)
│ │ ├── api/
│ │ │ ├── v1/
│ │ │ │ ├── pet_api.dart
│ │ │ │ ├── store_api.dart
│ │ │ │ ├── user_api.dart
│ │ │ │ └── index.dart
│ │ │ └── api_client.dart
│ │ ├── api_models/
│ │ │ ├── request/
│ │ │ ├── result/
│ │ │ ├── parameters/
│ │ │ ├── enums/
│ │ │ └── index.dart
│ │ ├── api_paths.dart
│ │ ├── api_documentation.md
│ │ └── SUMMARY.md
│ └── main.dart # 应用入口
├── generator_config.yaml # 代码生成器配置
├── pubspec.yaml # 项目依赖配置
├── generate_api.sh # 生成脚本macOS/Linux
├── generate_api.bat # 生成脚本Windows
├── Makefile # Make 命令配置
└── README.md # 本文件
```
## 🔧 配置说明
### pubspec.yaml
```yaml
dev_dependencies:
# 使用相对路径引用(示例)
swagger_generator_flutter:
path: ../../
# 实际项目中使用 git 引用
# swagger_generator_flutter:
# git:
# url: https://github.com/your-org/swagger_generator_flutter.git
# ref: main
```
### generator_config.yaml
主要配置项:
- `input.swagger_url`: Swagger 文档 URL
- `output.base_dir`: 代码输出目录
- `generation.api.base_result_type`: 基础响应类型
- `generation.models.use_json_serializable`: 使用 JSON 序列化
完整配置请参考项目中的 `generator_config.yaml` 文件。
## 💻 使用生成的 API
### 1. 创建 API 客户端
```dart
import 'package:dio/dio.dart';
import 'generated/api/api_client.dart';
final dio = Dio(BaseOptions(
baseUrl: 'https://petstore3.swagger.io/api/v3',
connectTimeout: const Duration(seconds: 30),
));
final apiClient = ApiClient(dio);
```
### 2. 调用 API
```dart
// 获取宠物信息
final petApi = apiClient.petApi;
final response = await petApi.getPetById(petId: 1);
if (response.isSuccess) {
print('Pet: ${response.data}');
}
// 获取用户信息
final userApi = apiClient.userApi;
final user = await userApi.getUserByName(username: 'john');
```
### 3. 使用生成的模型
```dart
import 'generated/api_models/index.dart';
// 创建请求对象
final createPetRequest = CreatePetRequest(
name: 'Fluffy',
category: 'Cat',
status: PetStatus.available,
);
// 调用 API
final response = await petApi.createPet(request: createPetRequest);
```
## 🛠️ Makefile 命令
本项目提供了便捷的 Makefile 命令:
| 命令 | 说明 |
|------|------|
| `make help` | 显示帮助信息 |
| `make install` | 安装依赖 |
| `make generate` | 生成 API 代码 |
| `make build` | 生成并构建(包含 build_runner |
| `make watch` | 监听模式(自动重新构建) |
| `make clean` | 清理生成的文件 |
| `make regenerate` | 清理并重新生成 |
| `make run` | 运行应用 |
| `make test` | 运行测试 |
| `make analyze` | 分析代码 |
| `make format` | 格式化代码 |
| `make check` | 完整代码质量检查 |
## 🔄 工作流程
### 开发流程
1. 修改 `generator_config.yaml` 配置(如果需要)
2. 运行 `make build` 生成代码
3. 在代码中使用生成的 API
4. 运行 `make run` 测试应用
### 更新 API 流程
1. 后端更新 Swagger 文档
2. 运行 `make regenerate` 重新生成代码
3. 检查生成的代码变更
4. 更新使用 API 的代码(如有破坏性变更)
5. 运行测试确保一切正常
## 📝 最佳实践
### 1. 版本控制
**选项 A: 忽略生成的代码**(推荐用于团队协作)
`.gitignore` 中添加:
```
lib/generated/
```
优点:
- 避免合并冲突
- 保持仓库清洁
- 团队成员各自生成
缺点:
- 需要额外的构建步骤
- CI/CD 需要生成代码
**选项 B: 提交生成的代码**
优点:
- 克隆即可运行
- CI/CD 更简单
- 明确的代码变更记录
缺点:
- 可能产生大量代码变更
- 合并冲突风险
### 2. 基础类型定义
确保项目中已定义好基础响应类型:
- `ApiResponse<T>`: 通用响应包装
- `PagedResponse<T>`: 分页响应包装
这些类型需要在生成代码前存在。
### 3. 配置管理
为不同环境创建不同的配置文件:
```
generator_config.yaml # 默认配置
generator_config.dev.yaml # 开发环境
generator_config.staging.yaml # 测试环境
generator_config.prod.yaml # 生产环境
```
### 4. CI/CD 集成
在 CI/CD 流程中添加代码生成步骤:
```yaml
# .github/workflows/build.yml
- name: Generate API code
run: |
dart run swagger_generator_flutter generate --all
dart run build_runner build --delete-conflicting-outputs
- name: Check for uncommitted changes
run: |
git diff --exit-code || (echo "Generated code has changes" && exit 1)
```
## 🐛 故障排除
### 问题 1: 找不到命令
```
Error: Could not find package swagger_generator_flutter
```
**解决**:
```bash
flutter pub get
```
### 问题 2: build_runner 失败
```
Error: A value of type 'Null' can't be returned from the method 'fromJson'
```
**解决**: 检查 `api_response.dart``paged_response.dart` 是否正确生成了 `.g.dart` 文件。
### 问题 3: 导入错误
```
Error: Not found: 'package:example_app/generated/api/api_client.dart'
```
**解决**: 确保已运行代码生成命令并且没有错误。
## 📚 相关资源
- [完整使用指南](../../USAGE_AS_DEV_DEPENDENCY.md)
- [配置文件模板](../../generator_config.template.yaml)
- [项目主文档](../../README.md)
- [Petstore API 文档](https://petstore3.swagger.io)
## 📧 获取帮助
如果遇到问题:
1. 查看 [故障排除](#-故障排除) 部分
2. 查看 [完整文档](../../USAGE_AS_DEV_DEPENDENCY.md)
3. 提交 Issue
4. 查看示例代码
## 📄 许可证
本示例应用仅用于演示目的。