📢 【三方库】ohos_axios v2.2.12 鸿蒙平台稳定性与质量提升

ohos_axios v2.2.12 已发布。本次升级聚焦该库质量提升,新增 enableAutoCookie 自动 Cookie 共享能力与 enableHttpRequestReuse HttpRequest 实例复用能力,兼容升级,开发者无需修改现有代码即可享受本次改进。推荐所有该库用户升级至本版本。

版本概览

类型 内容
质量提升 支持 enableAutoCookie 配置同一 HttpRequest 实例多次请求间自动携带与共享 Cookie(API 26+)
质量提升 支持 enableHttpRequestReuse 配置项控制是否开启 HttpRequest 实例复用,并新增 destroy() 方法统一管理实例生命周期

质量提升

支持 enableAutoCookie 实现 Cookie 自动携带与共享(API 26+)

背景:此前同一 HttpRequest 实例的多次请求之间无法自动复用服务端通过 Set-Cookie 下发的 Cookie,开发者需自行维护 Cookie 状态。本次新增 enableAutoCookie 配置项,开启后由底层 HttpRequest.enableAutoCookie() 自动管理 Cookie 的携带与共享。

实现library/src/main/ets/components/lib/adapters/ohos/index.js,约 40 行新增):

  • setHttpConfig 中新增分支:当 config.enableAutoCookie 为真时,调用新增的 setEnableAutoCookie(httpRequest, config, reject) 完成设置,调用点位于创建/复用 httpRequest 之后、构建 fullPath 之前。
  • 新增 setEnableAutoCookie 函数,包含三层校验与调用逻辑:
    • API 版本校验:读取 deviceInfo.sdkApiVersion,当低于 26 时通过 reject(new AxiosError(...)) 抛出 enableAutoCookie need Api >= 26,current api is ${apiVersion},错误码为 AxiosError.ERR_BAD_OPTION
    • 类型校验:当 config.enableAutoCookie 不是 boolean 时,抛出 enableAutoCookie must be a boolean value,错误码为 AxiosError.ERR_BAD_OPTION_VALUE
    • 调用底层接口:通过 httpRequest.enableAutoCookie(config.enableAutoCookie) 设置自动 Cookie;调用异常时捕获并通过 reject 抛出 AxiosError,正常时打印 axios: enableAutoCookie set to %s 日志。
  • 类型声明同步更新(library/index.d.ts):在 AxiosRequestConfig 接口新增 enableAutoCookie?: boolean; 字段。

约束:根据 README 说明,enableAutoCookie 仅在 API Level 26+ 且 enableHttpRequestReuse 同时开启时生效;由 true 切换为 false 时会清除当前实例已保存的 Cookie 共享状态。

支持 enableHttpRequestReuse 控制 HttpRequest 实例复用

背景:此前每次请求均通过 _http.createHttp() 新建 HttpRequest 实例并在请求结束后 destroy(),无法在同一 axios 实例的多次请求间复用底层 HttpRequest,限制了连接复用与 Cookie 共享等能力的使用。本次新增 enableHttpRequestReuse 配置项,开启后由 Axios 实例统一持有并复用 HttpRequest

实现

  • Axios 类新增实例复用管理library/src/main/ets/components/lib/core/Axios.js,29 行新增):

    • 构造函数初始化 this._httpRequest = null;,用于缓存复用的 HttpRequest 实例。
    • 新增 getHttpRequest() 方法:懒加载创建,当 this._httpRequest 为空时调用 _http.createHttp() 创建并缓存,后续直接返回缓存实例。
    • 新增 destroy() 方法:当 this._httpRequest 非空时调用 this._httpRequest.destroy() 释放资源并置空。
    • request() 方法中,合并配置后新增判断:当 this.defaults.enableHttpRequestReuse 为真时,执行 config.__httpRequestInstance = this.getHttpRequest(),将复用实例通过内部字段传递给适配器。
    • 新增 import _http from '@ohos.net.http'; 以支持上述创建逻辑。
  • 适配器复用实例library/src/main/ets/components/lib/adapters/ohos/index.jssetHttpConfig 内 10 行新增):

    • 将原先无条件 let httpRequest = _http.createHttp(); 改为条件分支:当 config.enableHttpRequestReuse && config.__httpRequestInstance 均为真时,复用 config.__httpRequestInstance;否则按原逻辑新建。
  • 请求结束时不销毁复用实例library/src/main/ets/components/lib/adapters/ohos/http.js,5 行改动):

    • 在 abort/清理回调中,将无条件的 httpRequest.destroy(); 改为 if (!config.enableHttpRequestReuse) { httpRequest.destroy(); },复用模式下由 Axios 实例统一管理生命周期。
  • 暴露 destroy() 到 axios 实例library/src/main/ets/components/lib/axios.js,6 行新增):

    • createInstance 中新增 instance.destroy = function() { context.destroy(); };,使开发者可通过 axios.destroy() 主动释放复用的 HttpRequest 资源。
  • 类型声明同步library/index.d.ts,3 行新增):

    • AxiosRequestConfig 接口新增 enableHttpRequestReuse?: boolean;
    • Axios 类新增 destroy(): void; 方法声明。

使用约束:开启 enableHttpRequestReuse 后,开发者需在不再使用时主动调用 instance.destroy() 释放 HttpRequest 资源,否则存在资源泄漏风险。

兼容性说明

  • 无 Breaking Changes,API 接口保持不变。
  • 本次变更以增量能力为主,现有代码无需修改。
  • 从 v2.2.11 起升级至 v2.2.12 均为兼容性升级。

升级方式

  • 鸿蒙原生:oh-package.json5"@ohos/axios": "^2.2.12",执行 ohpm install

相关链接

  • 文档:https://gitcode.com/CPF-ApplicationTPC/ohos_axios/blob/master/README.md
  • CHANGELOG:https://gitcode.com/CPF-ApplicationTPC/ohos_axios/blob/master/CHANGELOG.md
  • 反馈:https://gitcode.com/CPF-ApplicationTPC/ohos_axios/issues
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐