URL的简单构成

URL的简单构成

构成一般是这样的:

[scheme:][//authority][path][?query]

看下面一个url:

http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path;=32&id;=4

scheme: http
authority: www.java2s.com:8080
path: /yourpath/fileName.htm
query: 在?后的部分为:stove=10&path;=32&id;=4

又由于 authority 又一步可以划分为 host:port 形式,其中 host:port 用冒号分隔,冒号前的是 host,冒号后的是 port,所以:

host: www.java2s.com

port: 8080

这里是url中的参数,除了url中的参数还有两个http协议中常用参数是:

essay-header(请求头)和 body(常用于post请求中的请求体,有多种封装方法,不暴露在url中)这两个参数。

可以看出整个网络请求中参数主要可以分成:scheme、authority、path、query、essay-header、body
这六块,下面主要看下 Retrofit 怎么配置这六块参数的。

参数配置

1、scheme 和 authority

在 retrofit 中将这两者合体称为 baseurl,接口用法如下:

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(“https://api.github.com/”)
.build();

2、essay-header

(1)、静态essay-header(分为单个键值对和多个键值对两种注解方式):

单个键值对注解:

@Headers(“Cache-Control: max-age=640000”)
@GET(“widget/list”)
Call widgetList();

多个键值对注解:

@Headers({
“Accept: application/vnd.github.v3.full+json”,
“User-Agent: Retrofit-Sample-App”})
@GET(“users/{username}”)
Call getUser(@Path(“username”) String username);

(2)、动态essay-header(分为局部动态essay-header和全局动态essay-header)

a、局部动态essay-header(分为单个键值对essay-header和多个键值对essay-header):

单个键值对局部动态essay-header:

@GET(“user”)
Call getUser(@Header(“Authorization”) String authorization)

多个键值对局部动态essay-header(retrofit:2.1.0 新加的):

@GET(“user”)
Call getUser(@HeaderMap Map essay-headerMap)

b、全局动态essay-header(适用于项目中的essay-header规则一致的情况)

这里是用了 OkHttp 的 interceptor:

3、path(这里只看下GET请求,POST, PUT, DELETE请求一样处理)

这里分为带参数和不带参数两种:

不带参数的:

@GET(“widget/list”)
Call widgetList();

带参数的:

@GET(“users/{user}/repos”)
Call listRepos(@Path(“user”) String user);

这里是通过 @Path(“user”) 注解实现参数传递。

4、query

以 GET请求 为例提供了两种注解方式(单个键值对和多个键值对),如下:

单个键值对:

@GET(“group/{id}/users”)
Call groupList(@Path(“id”) int groupId, @Query(“sort”) String sort);

多个键值对:

@GET(“group/{id}/users”)
Call groupList(@Path(“id”) int groupId, @QueryMap Map options);

5、body

大多用于 POST请求 中:

@POST(“users/new”)
Call createUser(@Body User user);

Retrofit简单封装

这里我是将其单独封在一个类中(AppClient)。

Retrofit 中网络请求实际上用的还是他自家的 OkHttp,所以如果要配置请求的一些全局参数还是得先创建一个 OkHttp 的实例对象,然后一一配置,上面讲了配置 全局essay-header 也是这样处理的,所以这里我将其使用分成了三步:

这里首先要配三个库(retrofit库,json转化库,log的截断器库):

构建OkHttpClient实例

配置一些请求的全局参数:

这里做了四件事:

1、httpClientBuilder.hostnameVerifier 这里是针对我公司的Https证书问题,详情看这里:

https证书问题 http://blog.csdn.net/zzz_zzz_z/article/details/51824765

2、通过拦截器设置essay-header,可以看上面参数设置那里的讲解。

3、设置请求超时时间和读取数据时间:

.connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10,
TimeUnit.SECONDS);

4、设置 log拦截器,这里设置之后可以在 logcat
中看到每个网络请求的请求参数和返回结果以及请求时长,非常好用,当然先要配置下上面我配置的第三个库。

构建Retrofit实例

这里配置可以看出,Retrofit 内部也是封了一个 Okhttp 的实例,这里做了四件事:

1、设置了 baseurl 参数,可以看我上面参数配置的讲解。

2、设置了 OkHttpClient 实例。

3、gson转化工厂:addConverterFactory(GsonConverterFactory.create()),这里
Retrofit 内部会根据这个转换工厂及返回数据所指定的泛型实现直接转换。

4、网络请求的适配器工厂:addCallAdapterFactory(RxJavaCallAdapterFactory.create()),这个可以忽略暂时,因为我项目里使用了RXjava和Retrofit,后续我会写一篇
MVP+RXjava+Retrofit 的封装使用。

构建Call

开始网络请求并实现回调,这里先要配置请求参数,我封了个类专门用来设置请求接口:

构建call实例对象,开始网络请求并实现回调:

小结:

Retrofit 这个库将 ResfulApi 的几种请求都通过注解进行了一系列封装,整个请求流程比 OkHttp
简洁了很多,同时它可以通过设置GSON转换工厂内部实现返回数据的转化,使用过程非常简洁清晰,同时可以配合现在流行的 RXjava
一起使用,下面我准备搞一篇MVP+RX+Retrofit的封装使用,Okhttp可以换啦!

来源: http://chuansong.me/n/463517051526

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值