先簡單介紹下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