easyopen設計初衷

先簡單介紹下easyopen,一個簡單易用的接口開放平臺,平臺封裝了經常使用的參數校驗、結果返回等功能,開發者只需實現業務代碼便可。詳情前往:easyopen碼雲javascript

通常咱們提供給前端接口採用用springmvc接口方式。若是要增長一個接口,大體步驟以下前端

  1. 添加一個Controller,打上@Controller註解
  2. 添加一個方法,打上@RequestMapping,定義URL,參數等信息
  3. 參數校驗
  4. 在Service中寫業務代碼
  5. 返回結果給Controller
  6. Controller返回,轉換成json

若是再增長一個接口,依舊是執行者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

相關文章
相關標籤/搜索