Axios、http、rcp介紹
Axios
Axios ,是一個(gè)基于 promise 的網(wǎng)絡(luò)請(qǐng)求庫(kù),可以運(yùn)行 node.js 和瀏覽器中。本庫(kù)基于Axios 原庫(kù)v1.3.4版本進(jìn)行適配,使其可以運(yùn)行在 OpenHarmony,并沿用其現(xiàn)有用法和特性。地址:https://gitee.com/openharmony-sig/ohos_axios
@ohos.net.http
@ohos.net.http模塊是鴻蒙操作系統(tǒng)(HarmonyOS)中用于進(jìn)行HTTP數(shù)據(jù)請(qǐng)求的一個(gè)功能模塊。它允許應(yīng)用通過HTTP協(xié)議發(fā)起數(shù)據(jù)請(qǐng)求,支持多種常見的HTTP方法,包括GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE和CONNECT。
@hms.collaboration.rcp
Remote Communication Kit中的@hms.collaboration.rcp(后續(xù)簡(jiǎn)稱RCP)指的是遠(yuǎn)程通信平臺(tái)(remote communication platform),RCP提供了網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求功能,相較于Network Kit中HTTP請(qǐng)求能力,RCP更具易用性,且擁有更多的功能。在開發(fā)過程中,如果有些場(chǎng)景使用Network Kit中HTTP請(qǐng)求能力達(dá)不到預(yù)期或無法實(shí)現(xiàn),那么就可以嘗試使用RCP中的數(shù)據(jù)請(qǐng)求功能來實(shí)現(xiàn)。
Axios、http、rcp區(qū)別
Axios優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- http get、post、delete、put、patch 請(qǐng)求
- Promise API
- request 和 response 攔截器
- 轉(zhuǎn)換 request 和 response 的 data 數(shù)據(jù)
- 自動(dòng)轉(zhuǎn)換 JSON data 數(shù)據(jù)
- 支持設(shè)置代理
- 支持上傳下載文件
缺點(diǎn):
- 網(wǎng)絡(luò)請(qǐng)求不可取消
- 非官方庫(kù)需要依賴社區(qū)
http、rcp官方對(duì)比區(qū)別



RCP主要功能
實(shí)現(xiàn)基礎(chǔ)的網(wǎng)絡(luò)請(qǐng)求
在創(chuàng)建session會(huì)話后,通過創(chuàng)建請(qǐng)求對(duì)象并傳入第二個(gè)參數(shù)且指定為PATCH,然后通過session.fetch()發(fā)起請(qǐng)求即可。
- 導(dǎo)入rcp模塊。
- 創(chuàng)建headers,設(shè)置可接受的數(shù)據(jù)內(nèi)容的類型為json字符串;創(chuàng)建modifiedContent,傳入想要修改的內(nèi)容。
- 調(diào)用rcp.createSession()創(chuàng)建通信會(huì)話對(duì)象session。
- 使用new rcp.Request()方法創(chuàng)建請(qǐng)求對(duì)象req。
- 調(diào)用session.fetch()方法發(fā)起請(qǐng)求。
- 獲取響應(yīng)結(jié)果。
// 定義請(qǐng)求頭
let headers: rcp.RequestHeaders = {
'accept': 'application/json'
};
// 定義要修改的內(nèi)容
let modifiedContent: UserInfo = {
'userName': 'xxxxxx'
};
const securityConfig: rcp.SecurityConfiguration = {
tlsOptions: {
tlsVersion: 'TlsV1.3'
}
};
// 創(chuàng)建通信會(huì)話對(duì)象
const session = rcp.createSession({ requestConfiguration: { security: securityConfig } });
// 定義請(qǐng)求對(duì)象rep
let req = new rcp.Request('http://example.com/fetch', 'PATCH', headers, modifiedContent);
// 發(fā)起請(qǐng)求
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)}`);
});
實(shí)現(xiàn)對(duì)DNS的定制設(shè)置
通過RCP模塊,能夠?qū)崿F(xiàn)對(duì)DNS的定制設(shè)置。開發(fā)人員可以按自己的需要配置DNS,包括自定義DNS服務(wù)器、自定義靜態(tài)DNS規(guī)則和配置HTTPS上的DNS,都可以通過DnsConfiguration設(shè)置。DnsConfiguration中可設(shè)置dnsRules、dnsOverHttps。
實(shí)現(xiàn)多表單提交
在創(chuàng)建session會(huì)話后,通過new rcp.Request()的第四個(gè)參數(shù)傳入MultipartForm,然后通過rcp.fetch()發(fā)起POST請(qǐng)求將多個(gè)表單數(shù)據(jù)攜帶上傳至服務(wù)端。
- 導(dǎo)入rcp模塊。
- 設(shè)置請(qǐng)求頭類型、配置HTTP請(qǐng)求的超時(shí)值、HTTP請(qǐng)求中包含的cookie和設(shè)置傳輸數(shù)據(jù)范圍。
- 調(diào)用rcp.createSession()創(chuàng)建通信會(huì)話對(duì)象。
- 通過new rcp.MultipartForm()設(shè)置多表單數(shù)據(jù)。
- 使用new rcp.Request()創(chuàng)建請(qǐng)求對(duì)象,調(diào)用session.fetch()方法發(fā)起請(qǐng)求。
- 處理響應(yīng)結(jié)果。
攔截器的定義和使用
- 導(dǎo)入rcp模塊。
- 定義RequestUrlChangeInterceptor攔截器和ResponseHeaderRemoveInterceptor攔截器。
- 在intercept()方法中實(shí)現(xiàn)對(duì)請(qǐng)求/響應(yīng)的修改邏輯。
總結(jié)
RCP提供了網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求功能,相較于Network Kit中HTTP請(qǐng)求能力,RCP更具易用性;相較于Axios中,更加貼近HarmonyOS NEXT系統(tǒng)需求,而且官方也建議使用RCP網(wǎng)絡(luò)請(qǐng)求框架,所以建議大家使用RCP或者基于RCP自研。