鸿蒙HarmonyOS NEXT中网络库的选择
在Android开发中常见的网络请求有okhttp3、retrofit2、Volley、HttpUrlConnection等。
那么在鸿蒙(HarmOS)单框架开发中常见的网络请求有哪些?
@ohos.net.http 和 @hms.collaboration.rcp 是官方内置的网络请求方式,除此之外Axios是由前端迁移到鸿蒙端的网络库。它们各有优缺点,适用于不同的场景。
Axios、http、rcp介绍
Axios
Axios ,是一个基于 promise 的网络请求库,可以运行 node.js 和浏览器中。本库基于Axios 原库v1.3.4版本进行适配,使其可以运行在 OpenHarmony,并沿用其现有用法和特性。地址:https://gitee.com/openharmony-sig/ohos_axios
@ohos.net.http
@ohos.net.http模块是鸿蒙操作系统(HarmonyOS)中用于进行HTTP数据请求的一个功能模块。它允许应用通过HTTP协议发起数据请求,支持多种常见的HTTP方法,包括GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE和CONNECT。
@hms.collaboration.rcp
Remote Communication Kit中的@hms.collaboration.rcp(后续简称RCP)指的是远程通信平台(remote communication platform),RCP提供了网络数据请求功能,相较于Network Kit中HTTP请求能力,RCP更具易用性,且拥有更多的功能。在开发过程中,如果有些场景使用Network Kit中HTTP请求能力达不到预期或无法实现,那么就可以尝试使用RCP中的数据请求功能来实现。
Axios、http、rcp区别
Axios优缺点
优点:
- http get、post、delete、put、patch 请求
- Promise API
- request 和 response 拦截器
- 转换 request 和 response 的 data 数据
- 自动转换 JSON data 数据
- 支持设置代理
- 支持上传下载文件
缺点:
- 网络请求不可取消
- 非官方库需要依赖社区
http、rcp官方对比区别
RCP主要功能
实现基础的网络请求
在创建session会话后,通过创建请求对象并传入第二个参数且指定为PATCH,然后通过session.fetch()发起请求即可。
- 导入rcp模块。
- 创建headers,设置可接受的数据内容的类型为json字符串;创建modifiedContent,传入想要修改的内容。
- 调用rcp.createSession()创建通信会话对象session。
- 使用new rcp.Request()方法创建请求对象req。
- 调用session.fetch()方法发起请求。
- 获取响应结果。
// 定义请求头
let headers: rcp.RequestHeaders = {
'accept': 'application/json'
};
// 定义要修改的内容
let modifiedContent: UserInfo = {
'userName': 'xxxxxx'
};
const securityConfig: rcp.SecurityConfiguration = {
tlsOptions: {
tlsVersion: 'TlsV1.3'
}
};
// 创建通信会话对象
const session = rcp.createSession({ requestConfiguration: { security: securityConfig } });
// 定义请求对象rep
let req = new rcp.Request('http://example.com/fetch', 'PATCH', headers, modifiedContent);
// 发起请求
session.fetch(req).then((response) => {
Logger.info(`Request succeeded, message is ${JSON.stringify(response)}`);
}).catch((err: BusinessError) => {
Logger.error(`err: err code is ${err.code}, err message is ${JSON.stringify(err)}`);
});
实现对DNS的定制设置
通过RCP模块,能够实现对DNS的定制设置。开发人员可以按自己的需要配置DNS,包括自定义DNS服务器、自定义静态DNS规则和配置HTTPS上的DNS,都可以通过DnsConfiguration设置。DnsConfiguration中可设置dnsRules、dnsOverHttps。
实现多表单提交
在创建session会话后,通过new rcp.Request()的第四个参数传入MultipartForm,然后通过rcp.fetch()发起POST请求将多个表单数据携带上传至服务端。
- 导入rcp模块。
- 设置请求头类型、配置HTTP请求的超时值、HTTP请求中包含的cookie和设置传输数据范围。
- 调用rcp.createSession()创建通信会话对象。
- 通过new rcp.MultipartForm()设置多表单数据。
- 使用new rcp.Request()创建请求对象,调用session.fetch()方法发起请求。
- 处理响应结果。
拦截器的定义和使用
- 导入rcp模块。
- 定义RequestUrlChangeInterceptor拦截器和ResponseHeaderRemoveInterceptor拦截器。
- 在intercept()方法中实现对请求/响应的修改逻辑。
总结
RCP提供了网络数据请求功能,相较于Network Kit中HTTP请求能力,RCP更具易用性;相较于Axios中,更加贴近HarmonyOS NEXT系统需求,而且官方也建议使用RCP网络请求框架,所以建议大家使用RCP或者基于RCP自研。