使用动态代理对网络请求接口进行面向对象封装

在android中常规的网络请求方式是把URL地址作为常量放在某个固定的类中,比如定义一个URLConstant,里面定义URL1/URL2/URL3等等,在使用的时候使用URLConstant.URL1这样的形式来获取真实的网络地址。而每一个网络接口的参数列表则是放在另外一个类或者临时赋值,在这样的设计情况下,在网络接口达到一定量的时候会出现一个URL地址找不到对应的参数列表的困扰,因为太多了。
或许在真实实践中可以通过注释或者规范的命名来规避这个问题,但是我们仍然需要考虑有没有一种更好的解决方案呢?比如这样来调用:

//调用:
IPersonServer iPersonServer = ServerBuilder.build(this, IPersonServer.class);
Person person = iPersonServer.getPersonById("003");
//定义:
@Intf("/persons")
public interface IPersonServer {

    @Request("/get")
    Person getPersonById(@Param("personId") String id);
}

看起来是不是非常清爽,我们请求一些数据的时候只需要调用相应的java接口以及方法即可,而不用关心这个网络接口需要哪些参数,因为这个java接口已经帮我们约束了,那么接下来我们就记录一下如何实现网络请求的面向对象封装。

,