優(yōu)秀API設(shè)計(jì)的十大原則
每個(gè)軟件開發(fā)人員都使用API。“優(yōu)秀”的API設(shè)計(jì)就像魔法。不過,我不知道有多少人可以解釋為什么有的API很復(fù)雜、很難學(xué),而有的則干凈、簡(jiǎn)單、使用起來(lái)堪稱是一種快樂。關(guān)于這個(gè)問題,我將在文中回答,并提供優(yōu)秀API設(shè)計(jì)的十條法則。
1.只做你今天需要的
這是最***的規(guī)則。只解決今天必須解決的問題,最小化需要完成的答案。解決明天的問題的誘惑力是巨大的。但是一定要頂住誘惑!不要提前發(fā)布代碼,重點(diǎn)是注重縮小發(fā)布周期。如果需要花幾個(gè)小時(shí)的時(shí)間來(lái)回答新問題,那么就不用再猜測(cè)明天會(huì)出現(xiàn)什么問題了。
2.API模塊化
將大型問題轉(zhuǎn)化為規(guī)模較小的、可單獨(dú)解決的問題。模塊化API更容易學(xué)習(xí),并且可以隨時(shí)間而改變。你可以用新模塊替代舊模塊??梢砸粋€(gè)一個(gè)地教導(dǎo)模塊。也可以將API的實(shí)驗(yàn)部分從穩(wěn)定或傳統(tǒng)的部分中單獨(dú)分出來(lái)。
3.使用結(jié)構(gòu)化語(yǔ)法
使用結(jié)構(gòu)化的API語(yǔ)法:用thing.action或thing.property代替do_action_with_thing。語(yǔ)法將自然而然地適應(yīng)模塊化的方法,其中每個(gè)模塊是一個(gè)類。
4.使用自然語(yǔ)義
不要發(fā)明新概念。只使用開發(fā)人員眾所周知的概念,作為類系統(tǒng)的基礎(chǔ)。如果你發(fā)現(xiàn)自己需要解釋概念,那說明你出錯(cuò)了:要么你在解決以后的問題,要么你正在錯(cuò)誤地構(gòu)建API。
5.API的自我約定
每個(gè)類都要嚴(yán)格使用相同的樣式和約定。一致性是指當(dāng)一個(gè)人學(xué)會(huì)這一個(gè)類時(shí),他就能夠融會(huì)貫通地掌握全部的類。文檔化約定,讓它們成為貢獻(xiàn)者必須的標(biāo)準(zhǔn)。
6.API的可擴(kuò)展性
易擴(kuò)展性有許多好處,并不僅僅在于受到貢獻(xiàn)者的歡迎。它還可以讓你延緩實(shí)現(xiàn)功能,因?yàn)?ldquo;如果需要的話,后面再添加也很方便”。不需要的功能就不添加,這也是一種雙贏。
7.完全測(cè)試
每個(gè)類和方法必須經(jīng)過惡意代碼的完全測(cè)試。要像寫代碼一樣寫測(cè)試,然后像API提供給外界約定文檔一樣使用測(cè)試。每當(dāng)代碼改變的時(shí)候就運(yùn)行這些測(cè)試。不要擔(dān)心代碼覆蓋率。重要的是外部約定。也可以考慮使用約定生命周期。
8.分層式成長(zhǎng)
保持API突出重點(diǎn),然后在頂部將新的API分層,以便于它們能隨著時(shí)間的推移成長(zhǎng)??蓴U(kuò)展性并不意味著***期的成長(zhǎng)。明確API的范圍,并在范圍內(nèi)執(zhí)行。
9.保持簡(jiǎn)單易用
最終的測(cè)試要看API的簡(jiǎn)單易用程度。你寫的例子,能不能讓你的代碼看起來(lái)更簡(jiǎn)單?你是不是強(qiáng)迫用戶說明他們不在乎的選項(xiàng)?有沒有毫無(wú)價(jià)值的額外步驟?要注重約減少API的可視面積。
10.保持可移植性
不要讓系統(tǒng)概念泄漏到API。整潔有目的地抽象:這個(gè)API可以運(yùn)行在任何操作系統(tǒng)上。API必須能夠隱藏實(shí)現(xiàn),但要注意第4條規(guī)則,以及要使用自然抽象。
歡迎大家說說自己的看法。