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

Axios、http、rcp介紹

Axios

Axios ,是一個基于 promise 的網(wǎng)絡(luò)請求庫,可以運行 node.js 和瀏覽器中。本庫基于Axios 原庫v1.3.4版本進(jì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ù)請求的一個功能模塊。它允許應(yīng)用通過HTTP協(xié)議發(fā)起數(shù)據(jù)請求,支持多種常見的HTTP方法,包括GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE和CONNECT。

@hms.collaboration.rcp

Remote Communication Kit中的@hms.collaboration.rcp(后續(xù)簡稱RCP)指的是遠(yuǎn)程通信平臺(remote communication platform),RCP提供了網(wǎng)絡(luò)數(shù)據(jù)請求功能,相較于Network Kit中HTTP請求能力,RCP更具易用性,且擁有更多的功能。在開發(fā)過程中,如果有些場景使用Network Kit中HTTP請求能力達(dá)不到預(yù)期或無法實現(xiàn),那么就可以嘗試使用RCP中的數(shù)據(jù)請求功能來實現(xiàn)。

Axios、http、rcp區(qū)別

Axios優(yōu)缺點

優(yōu)點:

  • http get、post、delete、put、patch 請求
  • Promise API
  • request 和 response 攔截器
  • 轉(zhuǎn)換 request 和 response 的 data 數(shù)據(jù)
  • 自動轉(zhuǎn)換 JSON data 數(shù)據(jù)
  • 支持設(shè)置代理
  • 支持上傳下載文件

缺點:

  • 網(wǎng)絡(luò)請求不可取消
  • 非官方庫需要依賴社區(qū)

http、rcp官方對比區(qū)別

001.png
002.png
003.png

RCP主要功能

實現(xiàn)基礎(chǔ)的網(wǎng)絡(luò)請求

在創(chuàng)建session會話后,通過創(chuàng)建請求對象并傳入第二個參數(shù)且指定為PATCH,然后通過session.fetch()發(fā)起請求即可。

  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)建通信會話對象session。
  4. 使用new rcp.Request()方法創(chuàng)建請求對象req。
  5. 調(diào)用session.fetch()方法發(fā)起請求。
  6. 獲取響應(yīng)結(jié)果。
// 定義請求頭
let headers: rcp.RequestHeaders = {
  'accept': 'application/json'
};
// 定義要修改的內(nèi)容
let modifiedContent: UserInfo = {
  'userName': 'xxxxxx'
};
const securityConfig: rcp.SecurityConfiguration = {
  tlsOptions: {
    tlsVersion: 'TlsV1.3'
  }
};
// 創(chuàng)建通信會話對象
const session = rcp.createSession({ requestConfiguration: { security: securityConfig } });
// 定義請求對象rep
let req = new rcp.Request('http://example.com/fetch', 'PATCH', headers, modifiedContent);
// 發(fā)起請求
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)}`);
});

實現(xiàn)對DNS的定制設(shè)置

通過RCP模塊,能夠?qū)崿F(xiàn)對DNS的定制設(shè)置。開發(fā)人員可以按自己的需要配置DNS,包括自定義DNS服務(wù)器、自定義靜態(tài)DNS規(guī)則和配置HTTPS上的DNS,都可以通過DnsConfiguration設(shè)置。DnsConfiguration中可設(shè)置dnsRules、dnsOverHttps。

實現(xiàn)多表單提交

在創(chuàng)建session會話后,通過new rcp.Request()的第四個參數(shù)傳入MultipartForm,然后通過rcp.fetch()發(fā)起POST請求將多個表單數(shù)據(jù)攜帶上傳至服務(wù)端。

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

攔截器的定義和使用

  1. 導(dǎo)入rcp模塊。
  2. 定義RequestUrlChangeInterceptor攔截器和ResponseHeaderRemoveInterceptor攔截器。
  3. 在intercept()方法中實現(xiàn)對請求/響應(yīng)的修改邏輯。

總結(jié)

RCP提供了網(wǎng)絡(luò)數(shù)據(jù)請求功能,相較于Network Kit中HTTP請求能力,RCP更具易用性;相較于Axios中,更加貼近HarmonyOS NEXT系統(tǒng)需求,而且官方也建議使用RCP網(wǎng)絡(luò)請求框架,所以建議大家使用RCP或者基于RCP自研。

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

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

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