APP研发录读书笔记:网络底层框架设计
2016-06-02 19:06
736 查看
一.统一响应实体类Response
我们一般采用JSON作为API返回结果,数据格式一般为:
二、xml配置文件统一接口信息
在url.xml文件中定义:
在启动应用时,首先完成xml文件的读取,并将每一个接口映射到一个实体。在发起请求时,根据请求接口名进行相关信息的组合即可。
三.数据缓存设计
调用一次API后,一段时间内不再调用。对于不经常改变、无实时性要求的数据,如商品描述,设置较长的缓存时间,而对于频繁变动、实时性要求的数据可以设置较短的缓存时间。
四、MockService
在App开发过程中经常会遇到MobileAPI未开发好的情况,此时可以在App端参照MobileAPI接口参数及响应进行MockService设计。设计关键点:
针对需要Mock的数据接口指定哪个子类生成数据:
每一个Mock子类继承MockService,实现各自的geJsonData
使用方法:
五、HTTP头使用
1.利用请求头传递信息及校验:如对appKey,appId,clientType进行拼接+MD5传输。
2.时间校准:每调用MobileAPI,获取响应头中Date,计算本地时间与服务器时间的差值,通过这个差值就可实时拿到服务器的 时间
3.开启gzip压缩:减少存储空间及传输时间。在进行解析时,通过判断响应头HTTPResponse中content-encoding中是否包含gzip,进而采用GZIPInputStream还是常规方法进行流处理
我们一般采用JSON作为API返回结果,数据格式一般为:
{ "errorCode":0, "errorMessage":""; "result":{} }一般有错误码,错误消息及返回数据,因此可以定义Response如下:
public class Response { private int errorCode; private String errorMessage; private String result; public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public String getErrorMessage() { return errorMessage; } public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } }若是result都可对应一个实体类,可以将Response定义为泛型,进行更为简便的实体转化。
二、xml配置文件统一接口信息
在url.xml文件中定义:
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?> <url> <Node Key="login" NetType="post" Expires="300" Url="http://www.***.com/data/login"/> <Node Key="getUserInfo" NetType="get" Expires="300" Url="http://www.***.com/data/getUserInfo"/> </url></span>
在启动应用时,首先完成xml文件的读取,并将每一个接口映射到一个实体。在发起请求时,根据请求接口名进行相关信息的组合即可。
三.数据缓存设计
调用一次API后,一段时间内不再调用。对于不经常改变、无实时性要求的数据,如商品描述,设置较长的缓存时间,而对于频繁变动、实时性要求的数据可以设置较短的缓存时间。
四、MockService
在App开发过程中经常会遇到MobileAPI未开发好的情况,此时可以在App端参照MobileAPI接口参数及响应进行MockService设计。设计关键点:
针对需要Mock的数据接口指定哪个子类生成数据:
<Node Key="login" NetType="post" Expires="300" MockClass="com.***.mockdata.MockLogin" Url="http://www.***.com/data/login"/>
每一个Mock子类继承MockService,实现各自的geJsonData
public abstract class MockService{ public abstract String getJsonData(); }
public class MockLogin extends MockService{ public String getJsondata(){ User user=new user(); user.setuserName("zhangsan"); user.setStars(123); user.setUserId(17645); Response response=new Response(); response.setErrorCode(0); response.setErrorMessage("succeed"); response.setResult(JSON.toJSONString(user)); return JSON.toJSONString(response); } }
使用方法:
<span style="font-size:14px;">MockService mocksService=(MockService)class.forName(urlData.getMockClass()).newInstance(); String strResp=mocksService.getJsonData(); Response response=JSON.parseObject(strResp,Response.class);</span>
五、HTTP头使用
1.利用请求头传递信息及校验:如对appKey,appId,clientType进行拼接+MD5传输。
2.时间校准:每调用MobileAPI,获取响应头中Date,计算本地时间与服务器时间的差值,通过这个差值就可实时拿到服务器的 时间
3.开启gzip压缩:减少存储空间及传输时间。在进行解析时,通过判断响应头HTTPResponse中content-encoding中是否包含gzip,进而采用GZIPInputStream还是常规方法进行流处理
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories