先简单介绍下easyopen,一个简单易用的接口开放平台,平台封装了经常使用的参数校验、结果返回等功能,开发者只需实现业务代码便可。详情前往:easyopen码云javascript
通常咱们提供给前端接口采用用springmvc接口方式。若是要增长一个接口,大体步骤以下前端
若是再增长一个接口,依旧是执行者6个步骤,长此以往我对此感到厌烦。经过观察整个Controller中的代码咱们能够发现,除了第4步业务代码不同,其它步骤基本一致。咱们能够把相同的东西提取出来,即1,2,3,5,6只写一次,而后咱们只写业务代码。这里有同窗可能会问,只写一个Controller方法,那你的URL是多个的,怎么定义呢。是的,URL之定义一个,咱们能够经过参数来指定具体是要调用那个业务类。java
好比我接口中添加一个参数name,若是name="goods.add",那么就调用service.addGoods(param)方法。goods.add又是怎么跟service.addGoods(param)方法对应起来的呢?我能够在addGoods()方法上面加一个注解@Api(name="goods.add")里面有个name属性。在服务器启动时,扫描Service类中的全部方法,若是发现有@Api注解,就把它缓存起来,能够用一个map来保存他们Map<String,Object> map ... key对应name,value对应addGoods方法信息。而后就是等待请求的到来。经过name找到对应的方法,而后调用method.invoke()方法。在调用method.invoke()前作第3步,执行完后作第5,6步。这里的invoke也就是第4步了。git
伪代码以下:ajax
@RequestMapping(method = RequestMethod.POST) public void index(HttpServletRequest request, HttpServletResponse response) throws Throwable { String name = request.getParameter("name"); MethodInfo methodInfo = map.get(name); Param param = methodInfo.getParam(); param.validate(); // 3 Object obj = methodInfo.invoke(); // 4 writeResult(obj); // 5,6 }
这个Controller写一次就好了,而后咱们就写各自的Service。其它功能能够在此基础上进行扩展。好比请求参数验签,文档自动生成,国际化设置。spring
这样咱们提供给客户端只有一个url,对前端同窗来讲,它们的请求代码能够作一层封装,伪代码以下:json
function post(name,data,callback) { var postDataStr = ... jQuery.ajax({ url:'api', type:'post', dataType:'json', contentType: "application/json;charset=utf-8", data:postDataStr, success:function(data){ callback(data,postDataStr); } }); }
本文中提到的全部功能在easyopen上都已经实现,感兴趣的同窗能够下载源码来查看。api