OpenHarmony开发者论坛

标题: 同一个请求有不同的拦截、超时等处理方法,之前使用retrofit实现,如何在axios实现同样功能? [打印本页]

作者: xiagengwen    时间: 2023-8-31 19:32
标题: 同一个请求有不同的拦截、超时等处理方法,之前使用retrofit实现,如何在axios实现同样功能?
[md]【问题描述】
retrofit很容易对相同的请求接口进行不同的配置,同一个请求有不同的拦截、超时等处理方法,该功能不知道怎么在axios实现?例如我在retrofit中使用场景:
1)创建RetrofitBuilder配置;支持设置baseurl,设置Gson解析,设置自定义httpclient(例如okhttp),然后okhttp我们就能设置各种拦截器,超时。如图3
2)不同的RetrofitBuilder配置我们可以传入不同的okhttp的实例,实现不同的拦截,不同的超时请求。如图3。
3)使用上也很方便,拿对应的Api接口对象(不需要超时处理的,就拿toolApiWithNoTimeOut),直接调用方法就行。如图4。

![1.png](data/attachment/forum/202308/31/193058ec5fkrdc7hocduc1.png "1.png")

![2.png](data/attachment/forum/202308/31/193106qauxico0juwoyquu.png "2.png")


图3 不同的RetrofitBuilder配置

通过不同的RetrofitBuilder,就能针对相同的接口(ToolApi定义的接口),创建不同的拦截实现,超时实现等。

![3.png](data/attachment/forum/202308/31/193141e0tyf2a55zryosd5.png "3.png")



图4 用不同的RetrofitBuilder配置,来创建不同的请求接口对象

【运行环境】
硬件:rk3568;  ROM:  3.2 Beta5;  API 9
[/md]
作者: admin    时间: 2023-9-1 08:53
就能针对相同的接口(ToolApi定义的接口)
作者: admin    时间: 2023-9-1 08:56
创建不同的拦截实现,超时实现等
作者: 马迪    时间: 2023-9-5 10:19
对于上述 的使用场景,在axios中同样支持,并且使用更方便。
1. axios支持设置baseurl,设置Json解析(js原生接口),设置各种拦截器,和统一超时时间,如图1,还可以设置单个请求超时时间(图2)。
2. 同一请求设置不同的axios实例实现不同的拦截(语法支持),对标Retrofit第二第三点,如图1、图2、图3

(, 下载次数: 0)


  1. import {AxiosStatic,AxiosInstance } from '@ohos/axios'  
  2. import axios from '@ohos/axios'  

  3. console.log("ttttt first load")  

  4. const request:AxiosInstance = axios.create({  
  5.    baseURL:'http://139.159.161.172:3000',  
  6.    timeout:3000,  
  7.     responseType:"text"  
  8. })  
  9.   
  10. // request拦截器  
  11. request.interceptors.request.use(async config => {  
  12.     // 所有请求统一添加时间戳,避免部分获取到缓存数据  
  13.     let timerstamp = new Date().getTime();  
  14.     switch (config.method.toLocaleLowerCase()){  
  15.         case 'get':{  
  16.             if(config.params){  
  17.                 config.params.timerstamp = timerstamp;  
  18.             }else{  
  19.                 config.params = {timerstamp:timerstamp};  
  20.             }  
  21.             break;  
  22.         }  
  23.         case 'post':{  
  24.             if(config.data){  
  25.                 config.data.timerstamp = timerstamp;  
  26.             }else{  
  27.                 config.data = {timerstamp:timerstamp};  
  28.             }  
  29.             break;  
  30.         }  
  31.     }  
  32.     return config  
  33. }, error => {  
  34.     Promise.reject(error);  
  35. })  

  36. // 响应拦截器  
  37. request.interceptors.response.use(res => {  
  38.    return res;  
  39. }, error => {  
  40.         return Promise.reject(error);  
  41.     }  
  42. )  

  43. export const AxiosRequest = request
复制代码
(, 下载次数: 0)


  1. import {AxiosInstance } from '@ohos/axios'  
  2. import axios from '@ohos/axios'  
  3.   
  4. const request:AxiosInstance = axios.create({  
  5.     baseURL:'http://xxxx:3000',  
  6.     timeout:3000  
  7. })  

  8. export const AxiosRequest2 = request
复制代码
(, 下载次数: 0)

  1. import  {AxiosRequest} from './Request'  
  2. import  {AxiosRequest2} from './Request2'  
  3. import  {search} from './api/SearchApi'  


  4. search({keywords:"飘向北方"},{},AxiosRequest,5000)  
  5. search({keywords:"飘向北方"},{},AxiosRequest2,1000)
复制代码








欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5