到目前爲止,已經負責API接近兩年了,這兩年中發現現有的API存在的問題愈來愈多,但不少API一旦發佈後就再也不能修改了,即時升級和維護是必須的。一旦API發生變化,就可能對相關的調用者帶來巨大的代價,用戶須要排查全部調用的代碼,須要調整全部與之相關的部分,這些工做對他們來講都是額外的。若是辛辛苦苦完成這些之後,還發現了相關的bug,那對用戶的打擊就更大。若是API常常發生變化,用戶就會失去對提供方失去信心,從而也會影響目前的業務。php
可是咱們爲何還要修改API呢?爲了API看起來更加漂亮?爲了提供更多功能?爲了提供更好的性能?仍是僅僅以爲到了改變了時候了?對於用戶來講,他們更願意使用一個穩定可是看起來不那麼時髦的API,這並不意味着咱們再也不改進API了。當糟糕的API帶來的維護成本愈來愈大時,我想就是咱們去重構它的時候。html
若是能夠回頭從新再作一遍,那麼我心目中的優秀的API應該是怎麼樣的?編程
判斷一個API是否優秀,並非簡單地根據第一個版本給出判斷的,而是要看隨着時間的推移,該API是否還能存在,是否仍舊保持得不錯。槽糕的API接口各類各樣,可是好的API接口對於用戶來講必須知足如下幾個點:api
而對於開發人員來講,要求又是不同的:函數
如何作到以上幾點,如下是一些總結:工具
若是一個API被普遍使用了,那麼就不可能瞭解全部使用該API的用戶。若是設計者但願可以設計出被普遍使用的API,那麼必須站在用戶的角度來理解如何設計API庫,以及如何才能設計出這樣的API庫。性能
在設計過程當中,若是能按照下面的方式來進行設計,會讓這個API生命更長久學習
除此以外,下面還列出了一些具體的設計方法:測試
在設計API的時候,必定要避免任何極端的意見,尤爲是如下幾點:優化
API設計完成之後,須要通過周密的設計評審,評審的重點以下:
API須要是可測試的,測試不該依賴實現,測試充分的API,尤爲是通過了嚴格的「兼容性整合測試」的API,更能保證在升級的過程當中不出現兼容性問題。兼容性整合測試,是指一組測試用例集合,這組測試用例會站在使用者的立場上使用API。在API升級之後,再檢測這組測試用例是否能徹底符合預期的經過測試,儘量的發現兼容性問題。
對於每個API的設計者來講,都渴望作到「向後兼容」,由於不論是如今的API用戶,仍是潛在的API用戶,都只信任那些可兼容的API。但向後兼容有多個層次上的意義,並且不一樣層次的向後兼容,也意味着不一樣的重要性和複雜度。
過去咱們總但願能將現有的「不合理」的設計徹底推翻,而後按照如今「美好」的思路,從新設計這個API,可是在一段時間之後,又會碰到同樣的情況,須要再推翻一次。 若是咱們沒有有效的逐步改善的辦法,依靠推翻現有設計,從新設計API只能讓咱們回到起點,而後重現以前的過程。 要有一套行之有效的持續改善的辦法來在API兼容的同時,改善API使之更好。
每個API都是有生命週期的,咱們須要讓API的生命週期更長,而且在API的生命週期結束時能讓其平滑的消亡。
開發API的過程其實就是一個溝通交流的過程。溝通的雙方就是API用戶和API設計者。
在一個API不可避免要消亡或者改變的時候,咱們應該接受而且面對這個事實,下面列舉了幾種保證兼容性的前提下,對API進行調整的辦法:
引用地址:http://www.biaodianfu.com/how-to-design-a-good-api.html