IT评测·应用市场-qidao123.com

标题: 鸿蒙Harmony应用开辟,数据驾驶舱网络请求(Axios) 封装 [打印本页]

作者: 怀念夏天    时间: 2024-10-7 05:57
标题: 鸿蒙Harmony应用开辟,数据驾驶舱网络请求(Axios) 封装
鸿蒙Harmony应用开辟,数据驾驶舱网络请求(Axios) 封装

在进行网络请求的封装之前,先来分析一下我们项目所用到的接口的基本环境: 1. 在请求的接口中添加了署名。
2.在非登录接口中添加了token。 基于以上基本的环境。我们开始来对Axios做封装。
首先我们必要在根目录的oh-package.json5文件的dependencies中添加 axios的依靠
  1. "@ohos/axios": "^2.1.1",
复制代码
前面我们已经介绍了我们的接口请求中的2个必要因素是署名和token,如今我们开始对这2块的实现开始介绍

  1. private generateSignature(params: RequestParams): RequestParams {
  2.   const time = Date.now().toString().substr(0, 10);
  3.   let str = pref + "&";
  4.   const allParams: RequestParams = {};
  5.   Object.keys(params).forEach((key) => {
  6.    allParams[key] = params[key];
  7.   });
  8.   allParams['timestamp'] = time;
  9.   const sortedKeys = Object.keys(allParams).sort();
  10.   sortedKeys.forEach((key) => {
  11.    const value = allParams[key];
  12.    if (typeof value !== 'object' && value !== null) {
  13.      if (key === "timestamp") {
  14.        str += `${key}=${time}&`;
  15.      } else if (key !== "sign") {
  16.        str += `${key}=${decodeURIComponent(String(value))}&`;
  17.      }
  18.    }
  19.   });
  20.   str += suff;
  21.   allParams['sign'] = CryptoJS.MD5(str).toString()
  22.   return allParams
  23. }
复制代码

接下来我们创建一个PolarisHttp.ets开始对基本的get ,post ,put,patch等方法的封装
首先我们必要创建一个网络请求对象 PolarisHttpRequest,定义基础的变量
  1. config: HttpRequestConfig;  //请求配置参数
  2. interceptorHooks?: InterceptorHooks; //拦截器
  3. instance: AxiosInstance; //阿修罗实例
复制代码
阿修罗网络请求核心代码:
  1. request<T = CommonType>(config: HttpRequestConfig): Promise<T> {
  2.   return new Promise<T>((resolve, reject) => {
  3.    this.instance
  4.      .request<CommonType, T>(config)
  5.      .then(res => {
  6.        resolve(res);
  7.      })
  8.      .catch((err: Error) => {
  9.        LogUtils.error("网络请求Request异常:", err.toString());
  10.        if (err instanceof AxiosError) {
  11.          showToast(err.message)
  12.        }
  13.        reject(err);
  14.      });
  15.   });
  16. }
复制代码

我们可以看到上述的get 请求和post请求都用了2次回调,因为我们的 preferences数据的获取是一个异步过程(因为js我不是很熟悉如果你有好的实现,也可以分享下) 我们必要先异步获取到token 然后在添加到请求头中当中去.
使用示例

  1. const httpClient = new PolarisHttpRequest({
  2.  baseURL: 'https://api.example.com',
  3.  timeout: 5000,
  4.  interceptorHooks: {
  5.    requestInterceptor: (config) => {
  6.      // 请求拦截逻辑
  7.      return config;
  8.    },
  9.    responseInterceptor: (response) => {
  10.      // 响应拦截逻辑
  11.      return response;
  12.    }
  13.   }
  14. });
  15. // GET请求示例
  16. httpClient.get<ApiResponse<UserInfo>>({
  17.  url: '/user/info',
  18.  params: { userId: 123 }
  19. }).then(response => {
  20.  console.log(response.data);
  21. }).catch(error => {
  22.  console.error(error);
  23. });
  24. // POST请求示例
  25. httpClient.post<ApiResponse<LoginResult>>({
  26.  url: '/user/login',
  27.  data: { username: 'example', password: 'password' }
  28. }).then(response => {
  29.  console.log(response.data);
  30. }).catch(error => {
  31.  console.error(error);
  32. });
复制代码
注意事项

至此,您可以在ArkTS应用中更加方便地管理和发送HTTP请求,同时保证了请求的安全性和一致性。封装类提供的拦截器和错误处置惩罚机制可以大大简化API调用的复杂度。
完整项目下载地点

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4