關(guān)于接口文檔的思考

接口是什么汤善?廣義的說(shuō),在設(shè)計(jì)軟件時(shí)牧愁,軟件與外部系統(tǒng)的一切交互稱(chēng)為接口素邪,比如“用戶接口”(GUI, 一個(gè)圖形界面的程序,提供的用戶操作界面)猪半,命令行接口(CUI兔朦,就是命令行程序的用法),提供外部系統(tǒng)調(diào)用的應(yīng)用開(kāi)發(fā)接口(API/SDK)磨确,提供的配置文件沽甥、環(huán)境變量等等。本文主要討論狹義的接口即開(kāi)發(fā)包提供的API乏奥。

如果軟件分為多個(gè)模塊(或多個(gè)端摆舟,典型的如前端與后端),那么每個(gè)模塊又對(duì)其它模塊提供調(diào)用接口邓了,習(xí)慣上稱(chēng)之為內(nèi)部接口恨诱。內(nèi)部和外部是相對(duì)的,比如一個(gè)模塊內(nèi)骗炉,又分了若干子模塊照宝,那么該模塊又具有一些內(nèi)部接口;這些接口對(duì)每個(gè)子模塊來(lái)說(shuō)句葵,就相當(dāng)于是外部接口厕鹃。

那么該不該對(duì)接口建立文檔呢?應(yīng)該以什么原則建立文檔笼呆?

一般來(lái)說(shuō)熊响,如果有多人參與項(xiàng)目,尤其是模塊是分布式的诗赌,建立創(chuàng)建接口文檔汗茄,便于協(xié)作。典型的是通過(guò)網(wǎng)絡(luò)進(jìn)行通訊的若干子模塊铭若,如一個(gè)產(chǎn)品中有客戶端(比如.net編寫(xiě)的桌面應(yīng)用)洪碳,移動(dòng)客戶端(安卓/蘋(píng)果原生程序),服務(wù)端(比如用java編寫(xiě)叼屠,后面連接數(shù)據(jù)庫(kù))瞳腌,管理控制臺(tái)(比如使用html/js編寫(xiě)的Web應(yīng)用)等,尤其這些是不同編程語(yǔ)言寫(xiě)出的系統(tǒng)镜雨,其相互的調(diào)用接口嫂侍,如果不寫(xiě)接口文檔,難道要寫(xiě)html代碼的前端開(kāi)發(fā)去打開(kāi)后端的java源碼來(lái)查詢嗎?

在這種情況下挑宠,接口很好的為多人合作開(kāi)發(fā)提供了降低復(fù)雜度的方法菲盾,只要接口穩(wěn)定,調(diào)用者和被調(diào)用者就能免去很多相互干擾的因素各淀,加快開(kāi)發(fā)進(jìn)度懒鉴。

接口需要有文檔來(lái)記錄。

我見(jiàn)過(guò)很多小團(tuán)隊(duì)的產(chǎn)品根本沒(méi)有文檔碎浇,遇到接口不明確時(shí)都是直接找代碼临谱,看似省確很多事,實(shí)則為之后的維護(hù)埋下了雷奴璃。

文檔也應(yīng)納入版本控制悉默。

原始文檔應(yīng)該使用文本類(lèi)型。某個(gè)改動(dòng)是誰(shuí)做的苟穆,因?yàn)槭裁丛蜃龅穆笪挥袘?yīng)用了版本控制才能方便的做到問(wèn)題追源。使用文本類(lèi)型的文檔(比如markdown, wiki等格式)鞭缭,一則方便比較版本間改動(dòng)剖膳,二則可以生成html, word, pdf等多種美觀格式。我見(jiàn)過(guò)有好多團(tuán)隊(duì)是使用word來(lái)寫(xiě)文檔的岭辣,由于是二進(jìn)制格式吱晒,不利于版本比較,也不專(zhuān)業(yè)沦童。還有好多在文檔在頂部還標(biāo)有版本歷史仑濒,以及是誰(shuí)編輯的做了哪些修改這些內(nèi)容,真的沒(méi)必要(除非是特別重大的變化希望讀者知曉)偷遗,隨便用svn, git等版本工具就可以做的更專(zhuān)業(yè)墩瞳。

文檔要在沒(méi)有歧義的基礎(chǔ)上足夠簡(jiǎn)潔。

很多文檔描述很多氏豌,而真正有價(jià)值的內(nèi)容并不會(huì)增加很多喉酌。比如參數(shù)或字段的描述,如果從名字就能很清楚的知曉它的含義泵喘,又何必再寫(xiě)一遍(或翻譯一遍)呢泪电,白白增加了很多開(kāi)銷(xiāo),維護(hù)也麻煩了很多纪铺。文檔不應(yīng)浮于形式相速,而是力求只寫(xiě)最有價(jià)值的內(nèi)容。做好這一點(diǎn)的關(guān)鍵是作者與讀者要有足夠的約定鲜锚,比如蠶繭法就能很好的幫助簡(jiǎn)化類(lèi)型定義的描述突诬。

應(yīng)有機(jī)制保證接口文檔與代碼的一致苫拍。

一些團(tuán)隊(duì)在文檔上應(yīng)付差事浮于形式,在代碼寫(xiě)完后旺隙,補(bǔ)一個(gè)word文檔應(yīng)付怯疤。在更新代碼時(shí),文檔沒(méi)有及時(shí)更新催束,導(dǎo)致文檔都是錯(cuò)誤沒(méi)法看。好的做法都應(yīng)先有設(shè)計(jì)再寫(xiě)代碼伏社,比如架構(gòu)師或主程先設(shè)計(jì)好接口抠刺,然后再開(kāi)始編程實(shí)現(xiàn),在實(shí)現(xiàn)中發(fā)現(xiàn)問(wèn)題再修正接口摘昌,更新設(shè)計(jì)文檔速妖,而不應(yīng)是寫(xiě)完代碼再補(bǔ)個(gè)設(shè)計(jì)。而在文檔更新的具體做法上聪黎,也流行一種做法即文檔以注釋的方式內(nèi)嵌于代碼中罕容,我稱(chēng)之為“格式化注釋”,這樣做到設(shè)計(jì)與代碼在一起稿饰,更新也就更自然的同步了锦秒。之后再通過(guò)工具將注釋抽出來(lái)美化給讀者看。

在描述接口時(shí)喉镰,可以使用蠶繭表示法來(lái)簡(jiǎn)化文檔的描述旅择,關(guān)于蠶繭表示法的詳細(xì)說(shuō)明,可以參考這里侣姆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末生真,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捺宗,更是在濱河造成了極大的恐慌柱蟀,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚜厉,死亡現(xiàn)場(chǎng)離奇詭異长已,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)昼牛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)痰哨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人匾嘱,你說(shuō)我怎么就攤上這事斤斧。” “怎么了霎烙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵撬讽,是天一觀的道長(zhǎng)蕊连。 經(jīng)常有香客問(wèn)我,道長(zhǎng)游昼,這世上最難降的妖魔是什么甘苍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮烘豌,結(jié)果婚禮上载庭,老公的妹妹穿的比我還像新娘。我一直安慰自己廊佩,他們只是感情好囚聚,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著标锄,像睡著了一般顽铸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上料皇,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天谓松,我揣著相機(jī)與錄音,去河邊找鬼践剂。 笑死鬼譬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逊脯。 我是一名探鬼主播拧簸,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼男窟!你這毒婦竟也來(lái)了盆赤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤歉眷,失蹤者是張志新(化名)和其女友劉穎牺六,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體汗捡,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淑际,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扇住。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片春缕。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖艘蹋,靈堂內(nèi)的尸體忽然破棺而出锄贼,到底是詐尸還是另有隱情,我是刑警寧澤女阀,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布宅荤,位于F島的核電站屑迂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冯键。R本人自食惡果不足惜惹盼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惫确。 院中可真熱鬧手报,春花似錦、人聲如沸改化。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舔涎。三九已至胞锰,卻和暖如春鳄厌,著一層夾襖步出監(jiān)牢的瞬間齿桃,已是汗流浹背惠窄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工谅辣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懦窘,地道東北人前翎。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像畅涂,于是被迫代替她去往敵國(guó)和親港华。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,331評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理午衰,服務(wù)發(fā)現(xiàn)立宜,斷路器,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 人很容易被一次成功或失敗所影響
    小飛機(jī)1948閱讀 46評(píng)論 0 0
  • 2017年9月13 相博超媽媽 這兩天真的快忙暈了臊岸,公司事多橙数,后天就是家長(zhǎng)節(jié)了,大家也都在忙碌著帅戒,一天過(guò)的好充...
    一年級(jí)四班相博超媽媽閱讀 150評(píng)論 0 0