网络数据源
介绍
网络数据源模块(network)负责封装网络请求接口。它定义数据源接口与实现,通过 repository 对外提供数据访问能力。
NetworkClient
文件位置:foundation/network/src/main/ets/NetworkClient.ets
统一管理 Axios 实例与基础配置(baseUrl、timeout、headers)。
ts
import axios, { AxiosInstance } from "@ohos/axios";
/**
* @file 网络客户端
*/
export class NetworkClient {
/**
* Axios 实例
*/
static http: AxiosInstance = axios.create({
baseURL: "https://api.example.com/",
timeout: 30000
});
}Axios 文档:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Faxios
拦截器
全局拦截器
文件位置:foundation/network/src/main/ets/interceptors/AppInterceptors.ets
登录成功后会把 Token 存到本地,后续请求会自动从本地读取并写入请求头。
日志拦截器
文件位置:foundation/network/src/main/ets/interceptors/LogInterceptor.ets
日志拦截器会把请求参数与响应结果打印到控制台,方便快速定位问题。
数据源接口示例
文件位置:foundation/network/src/main/ets/datasource/goods/GoodsNetworkDataSource.ets
ts
import { Goods, NetworkPageData, NetworkResponse, GoodsSearchRequest } from "@foundation/biz-model";
import { NetworkResponse, NetworkPageData } from "@core/model";
/**
* @file 商品网络数据源接口
*/
export interface GoodsNetworkDataSource {
/**
* 分页查询商品
*/
getGoodsPage(params: GoodsSearchRequest): Promise<NetworkResponse<NetworkPageData<Goods>>>;
/**
* 获取商品详情
*/
getGoodsInfo(id: string): Promise<NetworkResponse<Goods>>;
}数据源实现示例
文件位置:foundation/network/src/main/ets/datasource/goods/GoodsNetworkDataSourceImpl.ets
ts
import { AxiosResponse } from "@ohos/axios";
import { NetworkClient } from "../../NetworkClient";
import { Goods, GoodsSearchRequest } from "@foundation/biz-model";
import { NetworkPageData, NetworkResponse } from "@core/model";
import { GoodsNetworkDataSource } from "./GoodsNetworkDataSource";
/**
* @file 商品网络数据源实现
*/
export class GoodsNetworkDataSourceImpl implements GoodsNetworkDataSource {
/**
* 分页查询商品
*/
async getGoodsPage(params: GoodsSearchRequest): Promise<NetworkResponse<NetworkPageData<Goods>>> {
const resp: AxiosResponse<NetworkResponse<NetworkPageData<Goods>>> =
await NetworkClient.http.post("goods/info/page", params);
return resp.data;
}
/**
* 获取商品详情
*/
async getGoodsInfo(id: string): Promise<NetworkResponse<Goods>> {
const resp: AxiosResponse<NetworkResponse<Goods>> =
await NetworkClient.http.get("goods/info/info", { params: { id } });
return resp.data;
}
}如何新增网络接口
- 在
foundation/network/src/main/ets/datasource/下新增业务文件夹。 - 编写数据源接口,定义方法签名。
- 编写数据源实现,封装接口地址与参数。
- 在
Index.ets中导出接口与实现。 - 在 repository 中使用该数据源。
注意事项
- 网络模块不直接给业务层使用,业务通过 repository 访问。
- 数据源接口与实现分离,便于测试和替换。
- 接口返回类型使用
NetworkResponse<T>统一封装。