如何設(shè)計一個優(yōu)秀的API
摘要: 到目前為止,已經(jīng)負(fù)責(zé) API 接近兩年了,這兩年中發(fā)現(xiàn)現(xiàn)有的 API 存在的問題越來越多,但很多 API 一旦發(fā)布后就不再能修改了,即時升級和維護是必須的。一旦 API 發(fā)生變化,就可能對相關(guān)的調(diào)用者帶來巨大的代價,用戶 …
到目前為止,已經(jīng)負(fù)責(zé) API 接近兩年了,這兩年中發(fā)現(xiàn)現(xiàn)有的 API 存在的問題越來越多,但很多 API 一旦發(fā)布后就不再能修改了,即時升級和維護是必須的。一旦 API 發(fā)生變化,就可能對相關(guān)的調(diào)用者帶來巨大的代價,用戶需要排查所有調(diào)用的代碼,需要調(diào)整所有與之相關(guān)的部分,這些工作對他們來說都是額外的。如果辛辛苦苦完成這些以后,還發(fā)現(xiàn)了相關(guān)的 bug,那對用戶的打擊就更大。如果 API 經(jīng)常發(fā)生變化,用戶就會失去對提供方失去信心,從而也會影響目前的業(yè)務(wù)。 但是我們?yōu)槭裁催€要修改 API 呢?為了 API 看起來更加漂亮?為了提供更多功能?為了提供更好的性能?還是僅僅覺得到了改變了時候了?對于用戶來說,他們更愿意使用一個穩(wěn)定但是看起來不那么時髦的 API,這并不意味著我們不再改進 API 了。當(dāng)糟糕的 API 帶來的維護成本越來越大時,我想就是我們?nèi)ブ貥?gòu)它的時候。 如果可以回頭重新再做一遍,那么我心目中的優(yōu)秀的 API 應(yīng)該是怎么樣的? 判斷一個 API 是否優(yōu)秀,并不是簡單地根據(jù)第一個版本給出判斷的,而是要看隨著時間的推移,該 API 是否還能存在,是否仍舊保持得不錯。槽糕的 API 接口各種各樣,但是好的 API 接口對于用戶來說必須滿足以下幾個點: 而對于開發(fā)人員來說,要求又是不一樣的: 如何做到以上幾點,以下是一些總結(jié): 1、?面向用例設(shè)計 如果一個 API 被廣泛使用了,那么就不可能了解所有使用該 API 的用戶。如果設(shè)計者希望能夠設(shè)計出被廣泛使用的 API,那么必須站在用戶的角度來理解如何設(shè)計 API 庫,以及如何才能設(shè)計出這樣的 API 庫。 2、?采用良好的設(shè)計思路 在設(shè)計過程中,如果能按照下面的方式來進行設(shè)計,會讓這個 API 生命更長久 除此之外,下面還列出了一些具體的設(shè)計方法: 3、?避免極端的意見 在設(shè)計 API 的時候,一定要避免任何極端的意見,尤其是以下幾點: 4、?有效的 API 評審 API 設(shè)計完成以后,需要經(jīng)過周密的設(shè)計評審,評審的重點如下: 5、?提高 API 的可測試性 API 需要是可測試的,測試不應(yīng)依賴實現(xiàn),測試充分的 API,尤其是經(jīng)過了嚴(yán)格的“兼容性整合測試”的 API,更能保證在升級的過程中不出現(xiàn)兼容性問題。兼容性整合測試,是指一組測試用例集合,這組測試用例會站在使用者的立場上使用 API。在 API 升級以后,再檢測這組測試用例是否能完全符合預(yù)期的通過測試,盡可能的發(fā)現(xiàn)兼容性問題。 6、?保證 API 的向后兼容 對于每一個 API 的設(shè)計者來說,都渴望做到“向后兼容”,因為不管是現(xiàn)在的 API 用戶,還是潛在的 API 用戶,都只信任那些可兼容的 API。但向后兼容有多個層次上的意義,而且不同層次的向后兼容,也意味著不同的重要性和復(fù)雜度。 7、?保持逐步改善 過去我們總希望能將現(xiàn)有的“不合理”的設(shè)計完全推翻,然后按照現(xiàn)在“美好”的思路,重新設(shè)計這個 API,但是在一段時間以后,又會碰到一樣的狀況,需要再推翻一次。 如果我們沒有有效的逐步改善的辦法,依靠推翻現(xiàn)有設(shè)計,重新設(shè)計 API 只能讓我們回到起點,然后重現(xiàn)之前的過程。 要有一套行之有效的持續(xù)改善的辦法來在 API 兼容的同時,改善 API 使之更好。 8、?把握 API 的生命周期 每一個 API 都是有生命周期的,我們需要讓 API 的生命周期更長,并且在 API 的生命周期結(jié)束時能讓其平滑的消亡。 開發(fā) API 的過程其實就是一個溝通交流的過程。溝通的雙方就是 API 用戶和 API 設(shè)計者。 9、?一些具體的實施方案 在一個 API 不可避免要消亡或者改變的時候,我們應(yīng)該接受并且面對這個事實,下面列舉了幾種保證兼容性的前提下,對 API 進行調(diào)整的辦法: 來源:apkbus
- 目前還沒評論,等你發(fā)揮!