http客户端和服务端交互协议
http cs两端交互协议通常包含:get/header/post/put/delete/,有时会把这几个对比成客户端对服务端数据的增(post)删(delete)改(put)查(get),即:
- 幂等性:理解http这几种交互不得不说这个特性:幂等性的语义是:一次或者多次操作不会对数据造成错误的影响,这个是相对的,取决于后端系统的设计及其实现。下面说的交互协议都是基于标准讨论他的幂等性。
- get:通常将参数直接拼接到url上或者cookie上,多用于数据的查询(参数不具有私密性),单次或者多次不会对数据造成什么影响,具有幂等性。
- header:类似于get,不同的是客户端只需要服务端响应header即可,具有幂等性
- delete:删除数据,具有幂等性
- post: 参数不是拼接到url上,而是封装到body中,多用于增删数据,通常请求多次会执行多次操作,对数据不友好,不具有幂等性
- put:类同于post,也多用于增删数据,put通常是存在即更新,不存在即创建,所以其具有幂等性。
- 在协议的具体使用中,通常后端都会兼容处理
- post和get之间的区别:http协议的约定中,get使用url或者cookie传递参数数据,post使用body传输参数数据 由于浏览器对url大小或者服务端对于url大小有限制,所以get参数通常有限制,post不然使用body无限制 get通常都是明文传输,post参数安全级别更高 get通常都是查询数据幂等性,post不然,不具有幂等性。
- post和put之间的区别: 两者雷同,都多用于增改数据,不同的是通常约定post是新增,多次访问会创建多个资源,put不然增或者更新,即post非幂等性,put幂等性。
- 协议间的幂等性取决于后端的设计及其处理约定。
链接请求数据结构类RequestBody(参数的数据结构封装,普通参数/表单参数/文件参数)
结合上面协议的理解,对于参数的数据结构封装,okhttp提供了三个类RequestBody/FormBody/MultyPartBody进行封装,先了解接口协议通常传递方式:
- get url参数拼接: 姜参数直接拼接到url上以get方式传递访问
- cookie传递参数:后续补全
- json格式:将所有的参数封装到一个json中去
- 表单格式:以key/value的方式将参数批量粉砖传递
-
文件格式:类表单格式,是json和表单的结合使用,具体参考下面:
RequestBody: 抽象类:form/multypart 两个类的父类,主要有下面几个方法: requestbody方法集合
下面是对上面三个类的介绍:
【备注:】isDuplex()和isOneShot()两个api不明白,待后续完善。
使用方法: requestbody使用方法
【备注:】MediaType参考下面文章:标识了文件或者后面内容的格式
FormBody:okhttp对于表单格式数据的封装类,即: image.png
FormBody的使用:对象的创建符合创建者模式,即:
formbody使用
MultyPartBody:带有文件的表单参数,即: multypartbody方法说明
MultyPartBody的使用:
MultyPartBody的使用
【备注:】注意type的设置,对应的值参考上面的图的第一个大圈中标识。
链接请求封装类Request
okhttp提供了链接请求的封装类Request,封装了请求的url,请求协议方法,添加header等,具体使用参考如下: request封装类方法【备注:】缓存策略可以参考下面文章及其后续的okhttp的缓存研究分析
掘金:post和get区别的深入理解
理解http协议的幂等性
常见文件格式标识符
http协议header缓存策略
okhttp基本用法
okhttp put传输文件
网友评论