直接跳到内容

网络数据源

介绍

网络数据源模块(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;
  }
}

如何新增网络接口

  1. foundation/network/src/main/ets/datasource/ 下新增业务文件夹。
  2. 编写数据源接口,定义方法签名。
  3. 编写数据源实现,封装接口地址与参数。
  4. Index.ets 中导出接口与实现。
  5. 在 repository 中使用该数据源。

注意事项

  • 网络模块不直接给业务层使用,业务通过 repository 访问。
  • 数据源接口与实现分离,便于测试和替换。
  • 接口返回类型使用 NetworkResponse<T> 统一封装。