怎么动态改变改造的基url和其他版本

  介绍

这篇文章给大家分享的是有关怎么动态改变改造的基url和其他版本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

<强>概述

随着谷歌对HttpClient摒弃,和截击的逐渐没落,OkHttp开始异军突起,而改造则对OkHttp进行了强制依赖。

改造是由平方公司出品的针对于Android和Java的类型安全的Http客户端,

如果看源码会发现其实质上就是对OkHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口请求的底层,

其将请求返回javaBean,对网络认证rest API进行了很好对支持此,使用改造将会极大的提高我们应用的网络体验。

<强>其他

既然是RESTful架构,那么我们就来看一下什么是休息吧。

rest (REpresentational State Transfer)是一组架构约束条件和原则。

RESTful架构都满足以下规则:

(1)每一个URI代表一种资源;

(2)客户端和服务器之间,传递这种资源的某种表现层;

(3)客户端通过四个Http动词,对服务器端资源进行操作,实现“表现层状态转化”。

下面话不多说了,来开始本文的正文吧

<强> 1。需求与前提

<>强基url

默认基本url: https://cloud.devwiki.net <代码>

测试版的url: https://dev.devwiki.net <代码>

私有云版本url: https://private.devwiki.net <代码>

<强>其他版本

<李>

/rest/v1/

<李>

/rest/v2/

<李>

/rest/v3/

<强>需求点

<李>

大部分接口使用云主机,部分接口使用私有主机

<李>

大部分接口使用rest/v3版本,部分接口使用v2, v1版本。李李

<>

每个主机都有可能存在v1, v2, v3的接口

<强> 2。实现思路

okhttp可以添加拦截器,可在发起访问前进行拦截,通常我们会在拦截器中统一添加头,比如:

class  HeaderInterceptor  implements  Interceptor  {   ,   ,private  static  final  String  ENCODING_GZIP =,“gzip";   ,private  static  final  String  CONTENT_TYPE_JSON =,“application/json; charset=UTF-8";   ,private  static  final  String  HEADER_CONTENT_TYPE =,“Content-Type";   ,private  static  final  String  HEADER_ACCEPT_TYPE =,“应用程序/json";   ,private  static  final  String  HEADER_CONTENT_ENCODING =,“Content-Encoding";   ,private  final  static  String  CHARSET =,“UTF-8";   ,   ,@Override   ,public  Response 拦截(Chain 链),throws  IOException  {   Request 才能;originRequest =, chain.request ();   Request.Builder 才能;newBuilder =, originRequest.newBuilder ();   newBuilder.addHeader才能(“Accept",, HEADER_ACCEPT_TYPE);   newBuilder.addHeader才能(“Accept-Charset",,字符集);   newBuilder.addHeader才能(“Accept-Encoding",, ENCODING_GZIP);   newBuilder.addHeader才能(“Accept-Language",, Locale.getDefault () .toString () .replace (“_",,“产生绯闻;));   newBuilder.addHeader才能(HEADER_CONTENT_TYPE, CONTENT_TYPE_JSON);   return 才能;chain.proceed (newBuilder.build ());   ,}   }

同理我们也可以在所有请求中添加统一的uuid或者关键进行防劫持或者认证。比如:

Request  originRequest =, chain.request ();   if  (paramsMap  !=, null), {   ,HttpUrl  originUrl =, originRequest.url ();   ,HttpUrl.Builder  newBuilder =, originUrl.newBuilder ();   ,for  (String  key : paramsMap.keySet ()), {   newBuilder.addEncodedQueryParameter才能(关键,paramsMap.get(关键));   ,}   ,HttpUrl  newUrl =, newBuilder.build ();   ,Request  newRequest =, originRequest.newBuilder () .url (newUrl) .build ();   ,return  chain.proceed newRequest ();   }   return  chain.proceed (originRequest);

那么,同样我们可以再拦截器中进行主机和路径的替换,那么怎么替换呢?

<强> 3。实现过程

<强> 3.1定义主机类型和其他版本

主机类型:

interface  HostName  {   ,String  CLOUD =,“CLOUD";   ,String  PRIVATE =,“PRIVATE";   ,String  DEV =,“DEV";   }   ,   interface  HostValue  {   ,String  CLOUD =,“https://www.baidu.com";   ,String  PRIVATE =,“https://private.bidu.com";   ,String  DEV =,“https://dev.baidu.com";   }

怎么动态改变改造的基url和其他版本