一.统一响应实体类Response
我们一般采用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,实现各自的geJsonDatapublic 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还是常规方法进行流处理