鴻蒙HarmonyOS NEXT中網(wǎng)絡(luò)庫(kù)的選擇

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ū)別

001.png
002.png
003.png

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)求即可。

  1. 導(dǎo)入rcp模塊。
  2. 創(chuàng)建headers,設(shè)置可接受的數(shù)據(jù)內(nèi)容的類型為json字符串;創(chuàng)建modifiedContent,傳入想要修改的內(nèi)容。
  3. 調(diào)用rcp.createSession()創(chuàng)建通信會(huì)話對(duì)象session。
  4. 使用new rcp.Request()方法創(chuàng)建請(qǐng)求對(duì)象req。
  5. 調(diào)用session.fetch()方法發(fā)起請(qǐng)求。
  6. 獲取響應(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ù)端。

  1. 導(dǎo)入rcp模塊。
  2. 設(shè)置請(qǐng)求頭類型、配置HTTP請(qǐng)求的超時(shí)值、HTTP請(qǐng)求中包含的cookie和設(shè)置傳輸數(shù)據(jù)范圍。
  3. 調(diào)用rcp.createSession()創(chuàng)建通信會(huì)話對(duì)象。
  4. 通過new rcp.MultipartForm()設(shè)置多表單數(shù)據(jù)。
  5. 使用new rcp.Request()創(chuàng)建請(qǐng)求對(duì)象,調(diào)用session.fetch()方法發(fā)起請(qǐng)求。
  6. 處理響應(yīng)結(jié)果。

攔截器的定義和使用

  1. 導(dǎo)入rcp模塊。
  2. 定義RequestUrlChangeInterceptor攔截器和ResponseHeaderRemoveInterceptor攔截器。
  3. 在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自研。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容