鸿蒙网络请求组件库 lib_network 架构设计与实践

一、项目概述
lib_network 是一个基于 @ohos/axios 封装的鸿蒙(HarmonyOS)网络请求组件库,采用分层架构 + 策略模式设计,提供高度可扩展的网络请求能力。该组件库已发布为 HAR(Harmony Ability Resource)包,支持跨模块复用。(这套框架已支持3个App开发上架。)
1.1 项目结构
tcnetworkproject/├── AppScope/ # 应用全局配置├── entry/ # 主应用模块│ ├── src/main/ets/│ │ ├── apis/ # 业务API定义│ │ ├── gateway/ # 应用网关实现│ │ └── pages/ # UI页面│ └── ohosTest/ # 测试模块├── lib_network/ # 网络请求组件库(HAR)│ ├── src/main/ets/components/│ │ ├── constants/ # 常量定义│ │ ├── event/ # 事件对象│ │ ├── http/ # HTTP核心封装│ │ ├── model/ # 数据模型│ │ ├── protocol/ # 协议接口│ │ └── utils/ # 工具类│ └── Index.ets # 模块导出入口└── libs/ # 已构建的HAR包
二、架构设计亮点
2.1 整体架构图

2.2 核心设计模式
1. 策略模式(Strategy Pattern)
设计意图:将网关协议封装为独立策略,支持运行时切换。
// 网关协议接口 - 策略接口export abstract classTCServiceProtocol{abstract serviceUrl(): stringabstract requestWithParams(params: Map<string, CommonType>, methodName: string, requestType: RequestType): Map<string, CommonType>abstract resultWithResponseObject(originResponse: ApiResponse): string}
应用场景:不同业务场景可实现不同网关策略,如测试环境、生产环境、加密网关、明文网关等。
2. 模板方法模式(Template Method Pattern)
设计意图:定义请求流程骨架,子类实现具体步骤。
// 请求管理器 - 模板方法export abstract class TCAPIBaseManager {publicasyncloadData(): Promise<string> {// 1. 参数校验(钩子方法)let booleanParams = await this.paramsListener?.isCorrectWithParamsData(params)// 2. 请求参数加工(策略方法)let paramsEntryMap = await this.tcServiceProtocol.requestWithParams(params, methodName, requestType)// 3. 请求前拦截(钩子方法)this.interceptorListener?.beforeRequestWithParams(params)// 4. 发起HTTP请求(核心步骤)requestPromise = axiosClient.get<ApiResponse>({...})// 5. 响应后拦截(钩子方法)this.interceptorListener?.didReceiveResponse(data)// 6. 响应解析(策略方法)let responseText = this.tcServiceProtocol?.resultWithResponseObject(data)}}
3. 观察者模式(Observer Pattern)
设计意图:实现请求/响应的解耦监听。
// 拦截器观察者接口export interface TCAPIManagerInterceptorListener {beforeRequestWithParams(params: Map<string, string>): voiddidReceiveResponse(data: ApiResponse): void}
三、组件功能优势
3.1 分层职责清晰
| 协议层 | ||
| 管理层 | ||
| HTTP层 | ||
| 服务层 | ||
| 工具层 |
3.2 核心功能特性
1. 网络状态预检测
在请求发起前自动检测网络连接状态,避免无效请求:
request<T = CommonType>(config: HttpRequestConfig): Promise<T> {const isNet = await CheckUtils.getDeviceHasNet();if (!isNet) {let reason = getContext().resourceManager.getStringByNameSync('net_error_tip');reject({ message: reason });return;}// ...正常请求流程}
2. 统一请求拦截器
支持请求前/后拦截,实现日志记录、Loading管理、Token注入等:
interceptorHooks: {requestInterceptor: async (config) => {LogUtils.info('请求链接:' + config.url);LogUtils.info('请求参数:' + JsonUtils.stringify(config.params));if (config.showLoading) {showLoadingDialog("加载中...")}return config;},responseInterceptor: (response) => {if (config.showLoading) {hideLoadingDialog()}if (response.status === 200 && response.data.errorCode != 0) {return Promise.reject(response)}return Promise.resolve(response.data);}}
3. 灵活的网关定制
支持自定义网关实现加解密逻辑:
// 应用层自定义网关export class ApiService extends DefaultAPIService {baseUrl: string = "https://www.wanandroid.com/";async requestWithParams(params: Map<string, string>, methodName: string, requestType: RequestType): Promise<Map<string, string>> {// 实现加密逻辑return params;}resultWithResponseObject(originResponse: ApiResponse): string {// 实现解密逻辑return response;}}
4. 参数合法性校验
在请求前进行参数校验,避免脏数据:
asyncisCorrectWithParamsData(): Promise<boolean> {const hadNet = await CheckUtils.getDeviceHasNet()return hadNet;}
5. 类型安全与泛型支持
完整的TypeScript类型定义,支持泛型响应:
export interface ApiResponse<T = CommonType> extends BaseResponse {data: T;}get<T = CommonType>(config: HttpRequestConfig): Promise<T> {config.method = 'GET'return this.request(config);}
3.3 使用示例
第一步:定义业务API
export class DemoApi extends BaseApi {paramsForApi(): Map<string, CommonType> {let params = new Map<string, CommonType>()params.set("username", "test_zp")params.set("password", "123456")return params}methodName(): string {return 'user/login'}requestType(): RequestType {return RequestType.POST}}
第二步:发起请求
let demoApi = new DemoApi()demoApi.loadData().then((data: string) => {console.info('接口请求成功:' + data)}).catch((err: string | Resource) => {console.error('接口请求失败:' + JSON.stringify(err))});
四、技术实现细节
4.1 请求流程图

4.2 类关系图

五、版本演进与更新记录
、总结
lib_network 组件库通过分层架构和设计模式的组合应用,实现了:
- 高扩展性
:通过策略模式支持自定义网关协议 - 低耦合
:接口与实现分离,易于测试和维护 - 易用性
:简洁的API设计,快速接入业务代码 - 健壮性
:内置网络检测、参数校验、错误处理机制
该组件库已在多个鸿蒙项目中得到验证,是构建高质量鸿蒙应用的可靠网络请求解决方案。
技术栈:HarmonyOS NEXT SDK、TypeScript、@ohos/axios
运行环境:>=5.0.0(12) / >=HarmonyOS NEXT SDK Developer Preview2项目地址https://github.com/anomalyco/HarmonyCollection/tree/main/tcnetworkproject
夜雨聆风