爲了更方便的書寫和闡述問題,文章中按照第一人稱的角度書寫。做爲一個以java爲主要開發語言的工程師,我所描述的都是java相關的編碼和設計。java
工程師的靜態輸出就是代碼和文檔,動態的就是各類應用程序(app,h5站點,微信公衆號,小程序)。動態的先不討論,主要討論靜態的。
隨意查看一個代碼庫,能夠看到代碼的編寫過程,某些代碼可能在如今看來實現很低效和好笑,可是在當時的技術和時間場景下,確定是最優的輸出。
也能夠在gitlab上看看每次的pull request ,看看當時對這些代碼的codeReview ;
反饋出的問題就是程序的設計很是重要。而接口是功能的抽象,相對比較穩定,對團隊來講影響比較大。
**git
先給接口來個簡單的定義:即協議,約定了請求和響應的參數和格式。spring
接口設計要求是:
1.簡潔;
2.考慮到向後兼容;編程
業界有一些基本的原則:小程序
restfull是一種設計風格,一切接口皆是資源。
目前是設計的主流,思想也很是先進。
segmentfault
請求和響應中的參數要結構化,好處是易讀易用。設計模式
這個怎麼重要都不爲過,接口設計必須考慮認證和受權,保證特定的人只能訪問特定的資源。
同時須要注意在日誌中不能含有用戶和系統的敏感信息。
api
也就是接口要通用,能夠處理不一樣客戶端的請求。通常在接口設計的時候,能夠帶入透傳參數,好比時區,位置(省市區),系統類型,系統版本,應用類型,應用版本等;安全
即接口的第一次請求的結果和後面N次的重試結果要不變,須要結合場景來保證。微信
有了接口設計的原則,能夠挑選一個可靠的接口框架來支持本身的工做,
一個好的接口框架應該有以下特色:
我通常選的springmvc,由於平時工做跟spring貼合的比較緊,並且spring有各類生態,適合在不一樣的行業和公司使用。jersey也用,雖然靈活,可是不具有廣泛適用性;
api太自由,會影響團隊的協做,而共同約定api的設計模式和實現模式能夠解決這個問題。
要綜合考慮向後的兼容性,可是隻實現當前軟件當前階段必須的功能點。
面向切面編程能夠在跟業務無關的垂直領域處理問題,好比日誌,監控,解析等;能夠提升代碼的重用性和規範性;
可是也有缺點,好比,增長了測試和分析的難度,也對研發人員要求比較高。
因此須要綜合考慮。
接口實現進行封裝能夠提升可維護性,可是也會帶來性能開銷,因此也是須要綜合考慮的。
**
經過本篇文章你能夠學到以下內容:
設計良好的接口,能夠提升軟件的複用性,提升團隊的輸出效率和質量。
原創不易,轉載請註明出處,歡迎溝通交流。