簡麗Framework 是一個開源java Web開發框架。前端
開源的框架、庫、組件等比比皆是,每一個開源產品都有它的定位和價值。java
簡麗Framework的定位是中小型Web項目的主體開發框架,它包含了對設計理念、開發規範、基礎模塊的理解和實踐。git
Web系統主要處理的就是數據和業務邏輯。通常來講數據的存儲結構相對穩定,映射到代碼中的數據對象也相對穩定。github
可是數據的中間處理過程每每是複雜、多變的,爲此就有了設計模式和開發手冊上提到的DTO、VO對象。在實際開發過程當中使用DTO,VO對象會有一系列使人糾結的問題:我要不要再增長一個DTO?對新增長的DTO我該取什麼名字?前端又在報怨後端VO對象返回的數據字段過多了...web
用靜態、強類型語言來表達變幻無窮的數據原本就是勉爲其難的事情。好在咱們如今有json這樣的動態弱類型數據對象,讓結構化數據的表達和傳遞變得輕盈,今後告別了笨重的DTO、VO們。json
用動態弱類型數據對象可能有什麼問題?咱們失去了編譯器的幫助,代碼重構將只能手動進行。得失與取捨須要本身來衡量。後端
多態性一般指在運行時決定調用子類的具體方法。但其實Web系統的業務領域用到繼承的場景並很少(硬要爲每一個Service寫一個接口的場景除外 😃 ),因此多態性也顯得少有用武之地。設計模式
咱們把多態的概念擴展一下,變成運行時調用指定對象的指定方法如何?api
經過Spring容器能夠獲得指定對象,經過反射來調用指定方法。服務器
彷佛變得有些撲朔迷離了,這樣作有什麼好處?
好處就是在Controller層能夠用一個接口實現對全部服務的調用。這樣Controller層幾乎能夠用一個通用方法來接管所有接口了。在這個通用方法裏能夠實現統一的異常處理、日誌記錄、計時器等。
BaseService service = (BaseService) getServiceFactory().getBean(serviceName); Class serviceClass = service.getClass(); Method method = serviceClass.getMethod(methodName, JsonRequest.class); jsonResponse = (JsonResponse) method.invoke(service, new Object[]{jsonRequest});
http://domain/api/{service}/{method}
以上是全部Web接口Url的統一格式,包含了服務名稱、方法名稱兩個參數。與面向對象的對象名和方法名相似,是每一個Web接口的語義描述。
{ "token": "", "client": "", "data": {} }
字段 | 類型 | 必填 | 說明 |
---|---|---|---|
token | String | 是 | 接口令牌 客戶端登陸成功後獲得token,之後每次調用接口都要帶上token |
client | String | 是 | 客戶端標識 |
data | Json | 否 | 請求業務數據 |
{ "code": 200, "message": "OK", "data": {} }
字段 | 類型 | 必填 | 說明 |
---|---|---|---|
code | Integer | 是 | 響應代碼 200:成功 400:請求參數錯誤 401:身份驗證失敗 403:受權驗證失敗 500:未知服務器內部錯誤 501:已知服務器內部錯誤 |
message | String | 是 | 響應消息內容 |
data | Json | 否 | 響應業務數據 |
能夠看這個接口規範並無遵循RESTful接口規範,我的認爲RESTful接口規範太桎梏於http協議,不足於表達api接口的語義。