天天看點

Prototype功能預覽九:接口最小化原則-更安全的接口

架構整體介紹:http://blog.csdn.net/flyxxxxx/article/category/7055640

對此架構有興趣或想參與開發的請加QQ群:255195191

在Spring MVC或dubbo以及其它任意接口調用(跨伺服器或第三方調用)過程中,我們經常會用一些POJO對象作為參數及傳回結果,這會有以下問題:

1、作為參數的POJO對象,是否所有的屬性都是接口所需要的?如果不是,調用都傳入了一些不需要的屬性值,接口是否對這個不需要的屬性值做了檢查?我相信幾乎100%的項目都沒有對此做檢查。

2、作為參數,是否在JAVA端做了完整的參數檢查?就我了解到的項目來說,基本都隻在前端做了參數的檢查工作,後端幾乎沒有檢查。

3、作為輸出結果的POJO對象,是否所有的屬性值都是APP或前端調用時需要用到的?我相信不是,那麼,多餘的屬性會造成手機流量的浪費以及對APP或前端的幹擾。

在Prototype架構中,通過注解來定義輸入輸出,所有輸入的參數都由架構自動檢查,未定義輸入的參數會完全忽略,未定義輸出的屬性不會輸出:

@ServiceDefine(hint = "...", value = "second demo")//定義一個服務接口

@RequestMapping("/query")

public class QueryUser extends Business{

    @Input(@Prop(desc = "關鍵字",maxLength=20))//輸出

    private String keyword;

     @Output(desc="使用者清單",{@Prop(desc="ID",name="id"),@Prop(desc="姓名",name="name")})

    private List<User> list;

}

上面的代碼相當于Spring MVC以下的代碼:

@RequestMapping("/query")

@ResponseBody

public List<User> queryUser(String keyword){

    ...

}

兩者之前的差别在于,Prototype架構不會把User對象中多餘的那些屬性輸出,保證接口輸入的安全性,完整的參數檢查,沒有多餘的結果輸出。