本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、核心区别

简单来说,@ohos.net.http 是鸿蒙系统的官方原生网络 API,而 axios 是一个流行的第三方 JavaScript HTTP 客户端库,需要被适配后才能运行在鸿蒙平台上

详细对比:

特性/维度 @ohos.net.http (官方 http 模块) axios (第三方库)
来源与性质 鸿蒙官方 SDK 原生模块 著名的第三方前端网络库
平台依赖性 强依赖。只能在 HarmonyOS 应用中使用,与系统深度集成。 弱依赖。本质是 JS 库,通过 适配层 在鸿蒙上运行。
API 风格 callback 和 Promise 两种风格。需要显式调用 request.destroy() 来中断和释放请求,更偏底层。 纯 Promise 风格。使用更简单直观,拦截器(Interceptors)等功能是其核心优势。
功能特性 提供基础的 HTTP 请求、响应、缓存、代理等能力。功能全面但需要自己封装。 提供了拦截器、请求/响应转换、自动 JSON 解析、取消请求(CancelToken) 等开箱即用的高级功能。
开发体验 需要手动处理很多细节(如头信息、JSON 序列化等),需要自行封装才能达到便捷的使用体验。 开箱即用,API 设计对前端开发者非常友好,上手速度快,生态丰富(有大量基于 axios 的封装和教程)。
性能与集成 原生性能,直接与系统网络栈交互,无额外开销。支持鸿蒙系统的安全策略、权限校验和后台网络访问管理 有一层 JS 适配的开销,但通常可忽略不计。功能依赖于适配层的实现程度。
维护与更新 由 HarmonyOS 官方团队维护,随 SDK 版本更新,稳定且可靠 由开源社区维护,在鸿蒙上的适配工作可能由社区或特定厂商负责,更新速度和兼容性需要关注。
类型支持 自带 .d.ts 类型定义文件,支持 ArkTS 的类型检查。 需要单独安装 @types/axios 或库本身提供类型定义。

二、如何选择?

选择哪一个取决于项目需求、团队背景和对未来维护。

推荐使用 @ohos.net.http 的场景:
  1. 追求纯粹的鸿蒙原生应用:希望代码库完全基于鸿蒙官方API,减少对第三方社区的依赖,保证长期的稳定性和兼容性。
  2. 需要深度集成系统特性:应用需要精细控制网络行为,例如严格遵循系统的后台网络策略、使用特定的安全协议或代理设置。
  3. 项目复杂度高,需要自定义封装:团队有能力并且愿意投入时间,基于底层 http 模块封装一个适合自己项目的、功能强大且定制化的网络层。大型项目通常采用此方式。
  4. 对应用大小极其敏感:不希望引入额外的第三方库代码来增加包体积(虽然axios通常很小)。

示例代码(@ohos.net.http):

// 1. 导入模块
import http from '@ohos.net.http';

// 2. 创建请求对象
let httpRequest = http.createHttp();

// 3. 发起请求 (Promise 风格)
async function fetchData() {
  let url = 'https://api.example.com/data';
  try {
    let response = await httpRequest.request(
      url,
      {
        method: http.RequestMethod.GET,
        connectTimeout: 60000,
        readTimeout: 60000,
        header: {
          'Content-Type': 'application/json'
        }
      }
    );

    // 4. 处理响应
    if (response.responseCode === 200) {
      let data = JSON.parse(response.result.toString());
      console.log('Data received:', data);
    } else {
      console.error('HTTP error code:', response.responseCode);
    }
  } catch (error) {
    console.error('Request failed:', error);
  } finally {
    // 5. !!!重要:销毁请求,释放资源 !!!
    httpRequest.destroy();
  }
}
推荐使用 axios 的场景:
  1. 快速原型开发或中小型项目:希望快速开始,避免重复造轮子,专注于业务逻辑而不是网络封装。
  2. 团队有丰富的前端开发经验:团队成员对 axios 的 API 和使用方式非常熟悉,可以几乎无成本地迁移到鸿蒙项目中来,开发效率极高
  3. 需要用到高级特性如拦截器:需要统一添加认证 Token、记录日志、处理错误等,拦截器功能能让你事半功倍。
  4. 项目可能涉及多端复用:虽然鸿蒙是主要平台,但部分业务逻辑或代码未来可能需要复用到 Web 或其他平台。

示例代码: 

// 1. 导入安装的axios库
import axios from 'axios';

// 2. 非常简单直观地发起请求
async function fetchData() {
  try {
    const response = await axios.get('https://api.example.com/data', {
      timeout: 60000,
      headers: { 'Content-Type': 'application/json' }
    });
    // 数据自动转换为JSON对象!
    console.log('Data received:', response.data);
  } catch (error) {
    console.error('Request failed:', error);
  }
}

// 3. 使用拦截器(巨大优势)
// 添加请求拦截器
axios.interceptors.request.use(
  (config) => {
    // 在发送请求前做些事,比如添加token
    const token = getTokenFromStorage();
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(
  (response) => {
    // 对响应数据做些事,比如自动处理特定错误码
    return response;
  },
  (error) => {
    if (error.response?.status === 401) {
      // 处理未授权错误,跳转到登录页
      showLoginModal();
    }
    return Promise.reject(error);
  }
);

三、总结

场景 推荐选择 理由
新手入门、 demo、简单应用 axios 上手极快,避免底层细节困扰,快速看到结果。
大型、复杂、企业级应用 @ohos.net.http 原生、可控、可深度定制,便于长期维护和优化。
前端转型鸿蒙 axios 利用现有知识和经验,平滑过渡,提高初期开发效率。
追求极致性能和系统集成 @ohos.net.http 无额外开销,完全融入鸿蒙生态。

个人建议:

      对于大多数情况,尤其是刚开始接触鸿蒙开发的,axios 开始是一个不错的选择。能避开许多初始的复杂性,可以更愉快地构建应用。如果对鸿蒙开发熟悉,或者项目有更高级的需求时,再考虑基于官方的 @ohos.net.http 模块去构建自己团队专属的网络层库。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐