如何設計乙個優秀的API

2022-09-21 03:12:09 字數 2678 閱讀 5364

判斷乙個api是否優秀,並不是簡單地根據第乙個版本給出判斷的,而是要看隨著時間的推移,該api是否還能存在,是否仍舊保持得不錯。槽糕的api介面各種各樣,但是好的api介面對於使用者來說必須滿足以下幾個點:

易學習:有完善的文件及提供盡可能多的示例和可copy-paste的**,像其他設計工作一樣,你應該應用最小驚訝原則。

易使用:沒有複雜的程式、複雜的細節,易於學習;靈活的api允許按欄位排序、可自定義分頁、 排序和篩選等。乙個完整的api意味著被期望的功能都包含在內。

而對於開發人員來說,要求又是不一樣的:

易開發:個最小化的介面是使用盡可能少的類以及盡可能少的類成員。這樣使得理解、記憶、除錯以及改變api更容易。

如何做到以上幾點,以下是一些總結:

1、 面向用例設計

如果乙個api被廣泛使用了,那麼就不可能了解所有使用該api的使用者。如果設計者希望能夠設計出被廣泛使用的api,那麼必須站在使用者的角度來理解如何設計api庫,以及如何才能設計出這樣的api庫。

2、 採用良好的設計思路

在設計過程中,如果能按照下面的方式來進行設計,會讓這個api生命更長久

面向用例的設計,收集使用者建議,把自己模擬成使用者,保證api設計的易用和合理

保證後續的需求可以通過擴充套件的形式完成

第一版做盡量少的內容,由於新需求可以通過擴充套件的形式完成,因此盡量少做事情是抑制api設計錯誤的乙個有效方案

對外提供清晰的api和文件規範,避免使用者錯誤的使用api,尤其是避免api(見第一節)靠後級別的api被使用者知曉與誤用

除此之外,下面還列出了一些具體的設計方法:

方法優於屬性

工廠方法優於建構函式

避免過多繼承

避免由於優化或者復用**影響api

面向介面程式設計

擴充套件引數應當是便利的

對元件進行合理定位,確定暴露多少介面

提供擴充套件點

3、 避免極端的意見

在設計api的時候,一定要避免任何極端的意見,尤其是以下幾點:

必須漂亮(api不一定需要漂亮)

api必須被正確地使用(使用者很難理解如何正確的使用api,api的設計者要充分考慮api被誤用的情況:如果乙個api可能會被誤用,那麼它一定會被誤用)

必須簡單(我們總會面臨複雜的需求,能兩者兼顧的api是更好的api)

必須高效能(效能可以通過其他手段優化,不應該影響api

的設計)

必須絕對相容(儘管本文一直提到如何保證相容,但是我們仍然要意識到,一些極少情況下會遇到的不相容是可以容忍的)

4、 有效的api評審

api設計完成以後,需要經過周密的設計評審,評審的重點如下:

用例驅動,評審前必須提供完善的使用用例,確保用例的合理性和完備性。

一致性,是否與系統中其他模組的介面風格一致,是否與對稱介面的設計一致。

簡單明瞭,api應該簡單好理解,容易學習和使用的api才不容易被誤用,給我們帶來更多的麻煩。

api盡可能少,如果乙個api可以暴露也可以不暴露,那麼就不要暴露他,等到使用者真正有需求的時候再將它成為乙個公開介面也不遲。

支援持續改進,api是否能夠方便地通過擴充套件的方式增加功能和優化。

5、 提高api的可測試性

api需要是可測試的,測試不應依賴實現,測試充分的api,尤其是經過了嚴格的「相容性整合測試」的api,更能保證在公升級的過程中不出現相容性問題。相容性整合測試,是指一組測試用例集合,這組測試用例會站在使用者的立場上使用api。在api公升級以後,再檢測這組測試用例是否能完全符合預期的通過測試,盡可能的發現相容性問題。

6、 保證api的向後相容

對於每乙個api的設計者來說,都渴望做到「向後相容」,因為不管是現在的api使用者,還是潛在的api使用者,都只信任那些可相容的api。但向後相容有多個層次上的意義,而且不同層次的向後相容,也意味著不同的重要性和複雜度。

7、 保持逐步改善

過去我們總希望能將現有的「不合理」的設計完全推翻,然後按照現在「美好」的思路,重新設計這個api,但是在一段時間以後,又會碰到一樣的狀況,需要再推翻一次。 如果我們沒有有效的逐步改善的辦法,依靠推翻現有設計,重新設計api只能讓我們回到起點,然後重現之前的過程。 要有一套行之有效的持續改善的辦法來在api相容的同時,改善api使之更好。

8、 把握api的生命週期

每乙個api都是有生命週期的,我們需要讓api的生命週期更長,並且在api的生命週期結束時能讓其平滑的消亡。

告訴使用者我們是如何設計的,避免誤用,提供指導,錯誤的使用往往是縮短api壽命的一大殺手

提供試用期,api不可能一開始就是穩定,經過試用的api才能有更強的生命力

為api分級:內部使用;二次開發使用;開發或試用中;穩定;棄用api。避免api被濫用的同時,我們可以通過調整api的級別,來擴大其影響力,也能更優雅的結束乙個api的生命週期。

開發api的過程其實就是乙個溝通交流的過程。溝通的雙方就是api使用者和api設計者。

9、 一些具體的實施方案

在乙個api不可避免要消亡或者改變的時候,我們應該接受並且面對這個事實,下面列舉了幾種保證相容性的前提下,對api進行調整的辦法:

將api標記為棄用,重新建立乙個新的api。如果乙個api不可避免要被消亡,這是唯一的辦法。

為其新增額外的引數或者引數選項來實現功能新增

將現有api拆成兩部分,提供乙個精簡的核心api,過去的api通過封裝核心api上實現。這通常用於解決使用者需要乙個**精簡的版本時。

在現有的api基礎上進行封裝,提供乙個功能更豐富的包或者類

如何設計乙個優秀的API

到目前為止,已經負責api接近兩年了,這兩年中發現現有的api存在的問題越來越多,但很多api一旦發布後就不再能修改了,即時公升級和維護是必須的。一旦api發生變化,就可能對相關的呼叫者帶來巨大的代價,使用者需要排查所有呼叫的 需要調整所有與之相關的部分,這些工作對他們來說都是額外的。如果辛辛苦苦完...

如何快速設計乙個優秀秒殺系統

1 什麼是秒殺 秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。2 秒殺系統場景特點 秒殺時大量使用者會在同一...

乙個簡單API設計

用乙個紅綠燈來學習jsapi的設計 css trafficlight li trafficlight span trafficlight.stop li nth child 1 span trafficlight.wait li nth child 2 span trafficlight.pass ...