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