什么是好的API設計?

摘要:有人言,API設計是編程工作中最難的事情。甚至有人認為至少要有10年的工作經驗才能接觸它。不過這里提出了一個引人思考的問題:究竟是構建什么樣的庫需要花費10年的時間去學習?

有人言,API設計是編程工作中最難的事情。甚至有人認為至少要有10年的工作經驗才能接觸它。其實通過好的培訓或導師學習這個進度可以縮短很多,也有這樣或那樣的時候,一些沒有經驗的程序員卻設計出好的API。不過這里引發出一個問題:“究竟是構建什么樣的庫需要花費10年的學習時間?”

在走出校門后,我很幸運地加入到Atalasoft公司,這是一家生產設計API的公司。在這里我受到了嚴格的訓練。我的導師Steve Hawley是一個喜歡把大部分時間都花費在研究各種困難問題上的人,并且他會把這些問題壓縮到一個非常精美的包里。Steve沒有太多的耐心教他的下屬,他愛好刻錄光碟,在這樣的環境下,雖沒達到青出于藍而勝于藍的地步,但卻讓我學到很多。

在他的價值觀里是沒有清晰明確的聲明或者條條框框的東西,我稱為90-9-0.9。他希望90%的人僅通過剪切和粘貼幾行代碼就可以解決常規問題。下面9%的目標是用來進行簡單地配置,通過查看文檔以及技術支持來解決問題,甚至有些問題在幾分鐘內就可以解決。0.9%的人會用各種亂七八糟的方式來扭曲你開發的庫,有時是因為性能原因,有時卻是利用其他一些你意想不到的古怪(但可執行)手段。為客戶的需求犧牲0.9%是完全正常的,只要保證客戶需求可以實現且文檔按照要求顯示出來。

最后,還有1%的人會誤解你的產品能力,這些人會讓你非常不高興。忽視還是重視?最好做個市場調查,看看他們的是否值得你去擴展庫且讓他們成為其中的一員。

Atalasoft的條形碼產品是一個很好的例子,在產品上花很多精力去仔細調優和預處理,掃描許多文檔且沒有發現問題。預處理后,在許可證允許的前提下默認會全力嘗試各種類型的條形碼。這已經相當快了,在這么短的時間里可以給任何人進行掃描操作。盡管有時候會借助一些昂貴的設備給用戶進行大規模批量化掃描,但速度還是不夠理想,所以掃描者可以修改一個簡單的枚舉屬性進行配置。偶爾有些掃描的確很困難,比如掃描一個帶有條形碼的香蕉。對于這樣的事情,可能會讓你中斷乃至更換條形碼引擎。但是誰會拿著這樣的產品去讀狗身上剃出來的條形碼呢?如果你是這樣的人,建議你去尋找其他產品用吧!

第一次看到這種情況的時候,我認為這樣的設計真糟糕。整個組件就像一個非常不統一且基于DIY(do-it-yourself)事件的插件系統。雖然如你所見,Atalasoft不會為一名架構宇航員的美感進行優化,他們會為減輕客戶支持負擔而進行不斷調優。正如我不喜歡用面向對象的思想來編寫內部庫一樣,在開放一個所有級別都能操作的簡單接口上,我認為沒有比這更好的范式。

在過去的兩年里,我一直在Bayard Rock公司負責API方面的工作,我們一直在研發一些反洗錢方面的項目。這意味著會做許多小型或中型實驗項目并且在以后會被整合到同行大的平臺上。在大多數情況下,Atalasoft風格的黑色裝箱(black-boxing)是起不到任何作用的。我們只有一個客戶并且我們會根據他們的需求調整我們的外部API。

然而,在一個細粒度級別中代碼重用是非常重要的,在這種情況下,最重要的是構建大型庫,即把許多分類函數快速的組合在一起(通過簡單的組合和沒有全面的單元測試),目前,我們正在進行優化實驗并且快速發展我們的組件。

那么,什么是好的API設計?其實,正如Steve所言,沒有什么清晰明確的框架可套,也更沒有什么捷徑可走。我們既需要按照常規來進行設計,還需要綜合客戶要求將我們的設計理念融入進去,當然,得預防那些像掃描香蕉那樣稀奇古怪的事情的發生。或許這就是為什么它會如此困難?我們也曾發表過《設計公共API的六個注意事項》文中作者根據自己的親身經驗總結了幾條API設計注意事項,大家不妨一起品嘗下!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450627.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux學習記錄-文件、目錄與磁盤

用戶和群組 用戶和群組主要是為了區分用戶對文件的操作權限。 賬號在/etc/passwd個人密碼在/etc/shadow組信息在/etc/group 不要亂動這3個文件文件權限和目錄配置 文件屬性 文件前綴解釋,例如: 第一個字符代表這個文件是『目錄、文件或鏈接文件等等』&am…

php curl模擬https請求

https請求(支持GET和POST) function http_request($url,$data null){$curl curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if(!empty($data)){curl_setopt($cur…

springboot集成環信sdk報錯

import io.swagger.client.ApiException; import io.swagger.client.api.MessagesApi; import io.swagger.client.model.Msg 這個是因為少兩個包,只需要把在你的pom.xml添加以下代碼即可,不要忘記點贊哈只需要添加兩個包即可,你可以自行網上下…

解決 error: Your local changes to the following files would be overwritten by merge:XXXX

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 idea 上將本地代碼推送到 git后 , 報錯如下圖 error: Your local changes to the following files would be overwritten by merge:src/…

深度有趣 | 30 快速圖像風格遷移

簡介 使用TensorFlow實現快速圖像風格遷移(Fast Neural Style Transfer) 原理 在之前介紹的圖像風格遷移中,我們根據內容圖片和風格圖片優化輸入圖片,使得內容損失函數和風格損失函數盡可能小 和DeepDream一樣,屬于網絡…

轉型從思維習慣的轉變開始

摘要:首先建議大家不要輕易轉向管理崗位,要認清自己是否適合做管理。轉型過程中應把握好幾點:良好的技術基礎,它是贏得團隊信任的前提,是把握團隊整體方向的關鍵;培養大局觀,只有站得高才能看得…

數據庫小知識點(一直更新)

一、mysql查詢是否含有某字段: mysql數據庫查詢帶有某個字段的所有表名 SELECT * FROM information_schema.columns WHERE column_namecolumn_name; oracle數據庫查詢帶有某個字段的所有表名 select column_name,table_name,from user_tab_columns where column_n…

其他運算符

原文地址:https://wangdoc.com/javascript/ void運算符 void運算符的作用是執行一個表達式,然后不返回任何值,或者說返回undefined。 void 0 // undefined void(0) // undefined 上面是void運算符的兩種寫法,都正確。建議采用后一…

git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解決辦法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 最近剛學 git rebase,覺得很牛逼的樣子, 結果今天就被打臉了。 git pull --rebase 1 報錯: Cann…

vue如何實現單頁緩存方案分析

實現全站的頁面緩存,前進刷新,返回走緩存,并且能記住上一頁的滾動位置,參考了很多技術實現,github上的導航組件實現的原理要么使用的keep-alive,要么參考了keep-alive的源碼,但是只用keep-alive…

C語言常用函數簡介

一、字符測試函數 isupper()測試字符是否為大寫英文字ispunct()測試字符是否為標點符號或特殊符號isspace()測試字符是否為空格字符isprint()測試字符是否為可打印字符islower()測試字符是否為小寫字母isgraphis()測試字符是否為可打印字符isdigit()測試字符是否為阿拉伯數字i…

thinkphp如何增加session的過期時間

原理:我們都知道session是建立在cookie的基礎上的,如果瀏覽器cookie清楚了,則tp就會重新建立一個session。 操作:直接增加瀏覽器的cookie的到期時間,就可以使tp的session增加。

需求心得

電路圖是人們為研究、工程規劃的需要。我們組項目需要設計實現一個矢量圖編輯器。在通過對變電站的電路圖進行矢量繪圖后,就可以通過矢量圖的縮放詳細信息。在分析需求后,寫下心得! 分析需求主要有一下幾個步驟: 1. 獲取和引導需求…

IT部門不應該是一個后勤部門

管理上最大的問題在于不重視預算與核算的管理。從管理層到員工,很少有經營的念頭,只是一味地埋頭做事。西方企業總結了當今幾百年的經營理念,最終把企業一切活動的評價都歸結到唯一的、可度量的標準上:錢來度量。 by——華為 作為…

you need to resolve your current index first 解決辦法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 從一個分支A切換到另一個分支B后,對切換后的B分支進行pull操作,因為pull操作實際上包含了fetchmerge操作&#x…

C語言,一種如此美麗的語言

人們說足球是一種優美的體育運動,而當我們在綠茵場上看到羅納爾多那行云流水的帶球動作時,我們不能不承認這種說法。然而,對于我來說,這種運動之所以如此的賞心悅目,跟那些乖張的天才球星們關系并不是那么大&#xff0…

基于websocket的聊天實現邏輯(springboot)

websocket的知識點:當用戶建立socket連接請求之后,服務器會給客戶段建一個session(非httpsession),這是是對客戶端的唯一識別碼,用于消息通信 第二上流程圖,流程圖解釋:用戶1要給用戶2發送消息…

Elasticsearch就這么簡單

Elasticsearch就這么簡單 Lucene就這么簡單轉載于:https://www.cnblogs.com/gaogaoyanjiu/p/9908520.html

大學生學編程系列」第五篇:自學編程需要多久才能找到工作?

很多編程初學者都會有這種疑問,自學學到什么程度或者學多久能夠找到工作,這種問題沒有統一答案,因為每個人的出發時候的基礎以及在學習過程中掌握的程度不盡相同,也會導致結果不一樣,只能說要看個人的造化了&#xff0…

chrome 谷歌瀏覽器怎么添加Axure擴展

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 工具/原料 谷歌瀏覽器Axure RP Extension for Chrome方法/步驟 百度搜索Axure RP,下載Axure RP,并進行安裝 安裝后…