主题
HarmonyOS 项目示例

项目配置
安装、初始化和首次配置,请参考 HarmonyOS 接入教程。
概述
本示例展示了如何在鸿蒙 ArkTS 项目中集成 ApiSorcery。ArkTS 是华为用于鸿蒙开发的编程语言,为构建原生鸿蒙应用程序提供现代化的开发体验。
特性
- 鸿蒙原生:针对鸿蒙生态系统和 API 进行优化
- 类型安全:完整的 ArkTS 类型支持,生成接口定义
- @ohos/axios 集成:内置支持鸿蒙适配的 HTTP 客户端
- 分布式能力:支持鸿蒙分布式特性
- 性能优化:针对鸿蒙运行时和内存管理进行优化
功能演示
本示例应用基于真实后端 API,实现了完整的用户管理模块:
- 分页列表 — 支持按 code、姓名、状态条件过滤的分页查询
- 完整 CRUD — 新增、查看、编辑、删除用户记录
- 头像上传 — 通过
POST /file/upload上传图片,含 10 MB 大小校验 - Excel 导出 — 通过 Blob 响应下载过滤后的结果为
.xlsx文件 - 字段验证 — 表单提交前异步检查
code字段是否已存在
代码示例
分页查询
typescript
import * as ApiUser from '../apis/auto/demo/ApiUser';
import { UserPageQueryDto, UserInfoDto } from '../api/auto/demo/model';
@Entry
@Component
struct UserPage {
@State users: UserInfoDto[] = [];
@State total: number = 0;
@State loading: boolean = false;
private page: number = 1;
async aboutToAppear() {
await this.loadUsers();
}
async loadUsers(code: string = '', name: string = '') {
this.loading = true;
try {
const res = await ApiUser.getUserPaged({
pagination: { page: this.page, limit: 10 },
code,
name,
} as UserPageQueryDto);
this.users = (res.results || []) as UserInfoDto[];
this.total = res.total || 0;
} catch (error) {
console.error('获取用户失败:', error);
} finally {
this.loading = false;
}
}
}Excel 导出
typescript
import * as ApiUser from '../apis/auto/demo/ApiUser';
import { ExportUsersRequest } from '../api/auto/demo/model';
import fs from '@ohos.file.fs';
async function exportUsers(code = '', name = '') {
const blobRes = await ApiUser.exportUsers({ code, name } as ExportUsersRequest);
const filePath = `${getContext().filesDir}/${blobRes.name ?? 'users.xlsx'}`;
const file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.WRITE_ONLY);
fs.writeSync(file.fd, blobRes.data!.buffer);
fs.closeSync(file);
}头像上传
typescript
import * as ApiFile from '../apis/auto/demo/ApiFile';
import { UploadFileRequest } from '../api/auto/demo/model';
import picker from '@ohos.file.picker';
async function uploadAvatar(): Promise<string> {
const photoPicker = new picker.PhotoViewPicker();
const result = await photoPicker.select({ maxSelectNumber: 1 });
const filePath = result.photoUris[0];
const fileId = await ApiFile.uploadFile({ file: filePath } as UploadFileRequest);
return `${BASE_URL}/file/${fileId}`;
}鸿蒙特有功能
分布式数据管理
typescript
import distributedKVStore from '@ohos.data.distributedKVStore';
class UserService {
private apiMain = new ApiMain();
private kvStore?: distributedKVStore.SingleKVStore;
async syncUserData(userId: string) {
const userData = await this.apiMain.getUser(userId);
// 与分布式 KV 存储同步
if (this.kvStore) {
await this.kvStore.put(`user_${userId}`, JSON.stringify(userData.data));
}
}
}后台任务集成
typescript
import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
class DataSyncService {
private apiMain = new ApiMain();
async startBackgroundSync() {
const requestInfo: backgroundTaskManager.BackgroundTaskInfo = {
bgMode: backgroundTaskManager.BackgroundMode.DATA_TRANSFER,
wantAgent: undefined
};
backgroundTaskManager.startBackgroundRunning(getContext(), requestInfo)
.then(() => {
this.performDataSync();
});
}
private async performDataSync() {
try {
const response = await this.apiMain.syncData();
console.log('后台同步完成:', response.data);
} catch (error) {
console.error('后台同步失败:', error);
}
}
}最佳实践
- 权限管理:正确请求和处理网络权限
- 生命周期管理:将 API 调用与鸿蒙组件生命周期集成
- 错误处理:实现鸿蒙特定的错误处理模式
- 性能优化:使用鸿蒙性能优化技术
- 分布式特性:在适用时利用鸿蒙分布式能力