前言
在前两篇文章中,我们深入探讨了网络层的封装和优化技巧。本文将带您走进网络层的实战应用,从架构设计到具体实现,一步步指导您如何使用我们精心构建的网络框架。
一、网络层架构设计
在鸿蒙应用开发中,一个清晰、合理的网络层架构是保证项目可维护性和扩展性的关键。以下是我们推荐的网络层目录结构:
项目
|-- network|-- data|-- models|-- params // 请求模型|-- responses // 返回模型|-- service // 网络接口定义|-- sources|-- remote // 网络数据源
二、Service网络接口设计与实现
1. 构建网络接口
接口常量文件ApiMethod.ets
,用于集中管理所有网络请求的路径。
// 接口请求路径常量定义,便于统一管理和引用
const HARMONY_INDEX = "harmony/index/json";
export { HARMONY_INDEX };
2. 网络请求类
ApiRequest
类作为网络请求的中心,负责网络库的初始化、配置以及请求的调用和拼装。
type DataClassConstructor<T> = ClassConstructor<ApiResult<T>>;
export class ApiRequest{private static instance: ApiRequeststatic getInstance (): ApiRequest {if (!ApiRequest.instance) {ApiRequest.instance = new ApiRequest()}return ApiRequest.instance}net : NetworkServiceconstructor() {this.net = new NetworkService("https://www.wanandroid.com/");this.net.dataConverter = new JsonDataConverter()this.net.addInterceptor(new DefaultInterceptor())}public getService() : NetworkService{return this.net;}private plainToClassApiResult<T>(ctor: DataClassConstructor<T>, data: object) : ApiResult<T>{return plainToClass(ctor,data,{enableImplicitConversion: false,exposeDefaultValues: true,}) as ApiResult<T>;}async requestHarmonyIndex(harmonyIndex: HarmonyIndexParam): Promise<ApiResult<HarmonyIndexResponse>> {let data = await ApiRequest.getInstance().getService().request({act : HARMONY_INDEX,expectDataType : http.HttpDataType.OBJECT,queryParams : new Map(Object.entries(harmonyIndex)),method: RequestMethod.GET})let result :ApiResult<HarmonyIndexResponse> = this.plainToClassApiResult<HarmonyIndexResponse>( ApiResult , data.result as object,)return result;}}
三、网络数据源层
1. 网络数据源
BaseRemoteSource
类提供了基础的网络请求处理,包括显示加载弹窗和基本的错误处理。
// BaseRemoteSource 类实现基础网络请求和错误处理
class BaseRemoteSource {async baseRequest<T>(request: Promise<ApiResult<T>>