APP研发录读书笔记:网络底层框架设计


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



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值