如何寫一份接口需求文檔轿秧?

在產(chǎn)品設(shè)計(jì)工作中,或多或少都會需要用到接口咨堤,特別是業(yè)務(wù)導(dǎo)向性的系統(tǒng)菇篡,接口幾乎是必不可少的功能。那么什么是接口一喘?如何寫一份能準(zhǔn)確表達(dá)業(yè)務(wù)需求的接口需求文檔呢驱还?

一、什么是接口

百科上對接口的定義:API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù)凸克,目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力议蟆,而又無需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)萎战。

要理解接口是什么咐容,首先理解一下為什么要用接口?兩個(gè)獨(dú)立的系統(tǒng)蚂维,它們的數(shù)據(jù)或程序是獨(dú)立的戳粒,這就使得它們無法直接訪問對方的數(shù)據(jù)庫或程序(兩個(gè)獨(dú)立的數(shù)據(jù)相當(dāng)于兩個(gè)獨(dú)立的家庭,每個(gè)家庭肯定是不允許外人隨便進(jìn)入的鸟雏,否則會發(fā)生偷竊等后果嚴(yán)重的事件)享郊。但是某些業(yè)務(wù)場景下,獨(dú)立的系統(tǒng)之間又必須相互共享數(shù)據(jù)或共用一套程序邏輯孝鹊,如統(tǒng)一業(yè)務(wù)流程上的不同業(yè)務(wù)操作系統(tǒng)炊琉,下游系統(tǒng)的業(yè)務(wù)依賴于上游系統(tǒng)的數(shù)據(jù)。

既然如此為什么不把它們設(shè)計(jì)成一個(gè)系統(tǒng)又活,這樣不就沒有上面的問題了嗎苔咪?這是因?yàn)橛械臉I(yè)務(wù)流程很長很復(fù)雜,如果設(shè)計(jì)成一個(gè)系統(tǒng)柳骄,整個(gè)系統(tǒng)變得很龐雜团赏,不論是功能設(shè)計(jì)、開發(fā)維護(hù)都很難耐薯。因此一般都會把雖然有上下游業(yè)務(wù)關(guān)系但又有清晰邊界的業(yè)務(wù)劃分成獨(dú)立的系統(tǒng)實(shí)現(xiàn)舔清,如采購系統(tǒng)和倉儲系統(tǒng)丝里。此外,很多時(shí)候我們需要獲取的數(shù)據(jù)是我們外部其他公司擁有的數(shù)據(jù)体谒,更不可能設(shè)計(jì)成同一個(gè)系統(tǒng)了杯聚。

基于以上兩點(diǎn):接口就是兩個(gè)獨(dú)立系統(tǒng)之間同步數(shù)據(jù)或訪問對方程序的途徑。

二抒痒、如何設(shè)計(jì)接口

1.搞清楚是主動(dòng)訪問還是被動(dòng)請求:

a.若是主動(dòng)訪問幌绍,有兩種情況,一是我方是數(shù)據(jù)的使用方故响,需要主動(dòng)從對方獲取數(shù)據(jù)傀广;二是我方是數(shù)據(jù)的提供方,需要主動(dòng)將數(shù)據(jù)同步給對方彩届。主動(dòng)訪問時(shí)無需做接口伪冰,而是訪問對方的接口,要搞清楚的問題是:我們需要在什么節(jié)點(diǎn)訪問對方的接口惨缆?是用戶觸發(fā)某個(gè)操作的時(shí)候?qū)崟r(shí)去訪問糜值?還是沒有實(shí)時(shí)性要求,只是周期性地訪問坯墨?

若我方是數(shù)據(jù)的使用方且需要的數(shù)據(jù)是用戶使用某個(gè)功能必須的數(shù)據(jù),因此必須在用戶操作時(shí)實(shí)時(shí)去訪問對方的接口獲取數(shù)據(jù)并展示給用戶病往,典型的有我們注冊某網(wǎng)站時(shí)獲取驗(yàn)證碼的功能捣染。

若我方是數(shù)據(jù)的使用方且需要的數(shù)據(jù)是一些跟用戶實(shí)時(shí)操作無關(guān)的基礎(chǔ)數(shù)據(jù),如客服系統(tǒng)需要從其他業(yè)務(wù)系統(tǒng)獲取用戶的基礎(chǔ)數(shù)據(jù)停巷,以在系統(tǒng)中的某些功能下展示用戶的信息(如客服在處理客訴等問題時(shí)耍攘,需要知道客戶的一些詳細(xì)信息,這些信息只有業(yè)務(wù)系統(tǒng)有)畔勤,這種情況蕾各,一般會新增一個(gè)腳本定時(shí)(如兩小時(shí)一次)訪問對方的接口將數(shù)據(jù)獲取過來存儲到自己的數(shù)據(jù)庫,在用到的時(shí)候直接從自己數(shù)據(jù)庫獲取并展示庆揪。

若我方是數(shù)據(jù)的提供方且提供的數(shù)據(jù)是下游系統(tǒng)需要的實(shí)時(shí)要求高的數(shù)據(jù)則更多地用實(shí)時(shí)同步式曲;若是基礎(chǔ)數(shù)據(jù),則選擇周期性同步的方式缸榛。

b.若是被動(dòng)請求吝羞,有兩種情況,一是我方是數(shù)據(jù)提供方内颗,需要對方來獲取數(shù)據(jù)钧排;二是我方是數(shù)據(jù)使用方,需要對方主動(dòng)將數(shù)據(jù)同步過來均澳。被動(dòng)請求需要提供接口供對方訪問恨溜,此時(shí)要搞清楚:讓對方來訪問的時(shí)候符衔,需要提供什么樣的參數(shù)?根據(jù)他提供的參數(shù)我們需要返回什么數(shù)據(jù)糟袁?這些數(shù)據(jù)從哪里取值判族?

若有一些數(shù)據(jù)的來源是本系統(tǒng),其他系統(tǒng)需要使用這些數(shù)據(jù)系吭,則可提供接口讓其他系統(tǒng)通過訪問接口獲取這些數(shù)據(jù)五嫂。

若我方是數(shù)據(jù)使用方且讓對方將數(shù)據(jù)主動(dòng)同步過來,此種場景典型的如我們是業(yè)務(wù)的下游肯尺,上游系統(tǒng)產(chǎn)生數(shù)據(jù)后沃缘,需要將數(shù)據(jù)同步到下游系統(tǒng)讓流程繼續(xù)進(jìn)行,并且流程的及時(shí)性要求高则吟,不能有延遲槐臀。這種情況下,只有上游系統(tǒng)知道什么節(jié)點(diǎn)產(chǎn)生了數(shù)據(jù)氓仲,因此只有等他產(chǎn)生數(shù)據(jù)后主動(dòng)推送給下游系統(tǒng)水慨,因?yàn)橄掠蜗到y(tǒng)因無法知道數(shù)據(jù)生成的時(shí)間,也就無法及時(shí)去獲取數(shù)據(jù)敬扛,這時(shí)最好的方式是讓對方主動(dòng)將數(shù)據(jù)同步過來晰洒。

2.搞清楚數(shù)據(jù)交互的實(shí)時(shí)性要求。

a.對于我方是數(shù)據(jù)使用方的情況啥箭,要根據(jù)業(yè)務(wù)的需要決定獲取數(shù)據(jù)的實(shí)時(shí)性谍珊。如上文所說,如果是用戶使用功能時(shí)需要的數(shù)據(jù)就是即時(shí)性訪問急侥;如果是定期獲取基礎(chǔ)數(shù)據(jù)砌滞,根據(jù)我們對數(shù)據(jù)準(zhǔn)確性的要求和對方數(shù)據(jù)變更的頻率決定獲取的周期,如我們對數(shù)據(jù)的準(zhǔn)確性要求不是100%的要求坏怪,且對方的數(shù)據(jù)變更頻率也不是很高贝润,則周期可設(shè)計(jì)的長一些,如每天一次铝宵,每幾個(gè)小時(shí)一次等打掘。

b.對于我方是數(shù)據(jù)提供方的情況,則以對方的業(yè)務(wù)需要為準(zhǔn)捉超,但是對于獲取數(shù)據(jù)的訪問量大等特殊情況胧卤,應(yīng)在需求中或評審中做好說明和交代,以幫助開發(fā)設(shè)計(jì)更滿足需要的接口拼岳。

3.選擇合適的接口方式枝誊。

結(jié)合接口的不同類型和實(shí)時(shí)性要求兩方面,可以選擇合適的接口實(shí)現(xiàn)方式:

a.mq消息隊(duì)列:是一個(gè)中間件惜纸,數(shù)據(jù)提供方將數(shù)據(jù)放到中間件叶撒,數(shù)據(jù)獲取方從中間件中獲取數(shù)據(jù)绝骚。針對向多個(gè)系統(tǒng)同步基礎(chǔ)數(shù)據(jù)的需要,消息隊(duì)列是最適合的方式祠够。若選擇這種同步方式压汪,要注意的一點(diǎn)是:增量同步還是全量同步,若是增量同步古瓤,對方是增量獲取還是全量獲戎蛊省?若是全量同步落君,在什么情況下穿香,對方應(yīng)該更新數(shù)據(jù),什么情況下應(yīng)該更新數(shù)據(jù)绎速?

b.otter同步:數(shù)據(jù)同步方直接訪問數(shù)據(jù)獲取方的數(shù)據(jù)表將數(shù)據(jù)寫入對應(yīng)的表中皮获,這種方式實(shí)時(shí)性最高,若對數(shù)據(jù)的準(zhǔn)確性要求很高纹冤,此方式是很好的數(shù)據(jù)同步方式洒宝。

c.http:一般在功能設(shè)計(jì)中常用的接口是此種方式,雙方通過http地址保持?jǐn)?shù)據(jù)同步和通信萌京。

在設(shè)計(jì)具體的數(shù)據(jù)同步接口時(shí)雁歌,具體的方式產(chǎn)品經(jīng)理不用關(guān)注,由開發(fā)根據(jù)需求設(shè)計(jì)合理的方式知残,然后產(chǎn)品可幫助開發(fā)一起確定所選方式是否滿足業(yè)務(wù)需要将宪。除非業(yè)務(wù)上有特殊要求,則在需求中可指定具體的方式橡庞。

三、如何編寫接口文檔

不同的接口使用場景印蔗,需要關(guān)注的點(diǎn)和交代清楚的規(guī)則不一樣扒最,以主動(dòng)/被動(dòng)+數(shù)據(jù)使用方/數(shù)據(jù)獲取方的維度,有以下四種情況:

1.如果是向?qū)Ψ较到y(tǒng)主動(dòng)推送數(shù)據(jù)吧趣,則可按以下方式整理接口需求:


2.如果是對方主動(dòng)來獲取數(shù)據(jù),則可按以下方式整理接口需求:?

3.如果是被動(dòng)接收對方推送的數(shù)據(jù)耙厚,則可按以下方式整理接口需求:


4.如果主動(dòng)從對方獲取數(shù)據(jù)强挫,則可按以下方式整理接口需求:


PS:在下一篇文章中將以具體的文檔實(shí)例來說明不同的場景應(yīng)該考慮和注意的點(diǎn)。書寫過程中一些偏技術(shù)的點(diǎn)應(yīng)及時(shí)與開發(fā)咨詢和溝通薛躬,防止編寫的文檔與實(shí)際出入太大俯渤;接口的開發(fā)肯定涉及兩個(gè)系統(tǒng),因此在評審前與對方產(chǎn)品對好文檔是必須的型宝,要保證雙方開發(fā)拿到的文檔標(biāo)準(zhǔn)是一樣的八匠,否則在開發(fā)過程中會出現(xiàn)雙方約定不一致導(dǎo)致需要修改的情況絮爷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市梨树,隨后出現(xiàn)的幾起案子坑夯,更是在濱河造成了極大的恐慌,老刑警劉巖抡四,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柜蜈,死亡現(xiàn)場離奇詭異,居然都是意外死亡指巡,警方通過查閱死者的電腦和手機(jī)淑履,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厌处,“玉大人鳖谈,你說我怎么就攤上這事±妫” “怎么了缆娃?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瑰排。 經(jīng)常有香客問我贯要,道長,這世上最難降的妖魔是什么椭住? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任崇渗,我火速辦了婚禮,結(jié)果婚禮上京郑,老公的妹妹穿的比我還像新娘宅广。我一直安慰自己,他們只是感情好些举,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布跟狱。 她就那樣靜靜地躺著,像睡著了一般户魏。 火紅的嫁衣襯著肌膚如雪驶臊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天叼丑,我揣著相機(jī)與錄音关翎,去河邊找鬼。 笑死纵寝,一個(gè)胖子當(dāng)著我的面吹牛症副,可吹牛的內(nèi)容都是我干的政基。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沮明,長吁一口氣:“原來是場噩夢啊……” “哼荐健!你這毒婦竟也來了琳袄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤址否,失蹤者是張志新(化名)和其女友劉穎碎紊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體音同,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秃嗜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年锅锨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇尚。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顾画,死狀恐怖研侣,靈堂內(nèi)的尸體忽然破棺而出炮捧,到底是詐尸還是另有隱情,我是刑警寧澤咆课,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站喇澡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏读存。R本人自食惡果不足惜呕屎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尔当。 院中可真熱鬧蹂安,春花似錦、人聲如沸侠碧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽替饿。三九已至贸典,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間据过,已是汗流浹背绳锅。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳞芙,地道東北人原朝。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像鞠评,于是被迫代替她去往敵國和親丙笋。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,101評論 1 32
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,849評論 0 5
  • 在一個(gè)方法內(nèi)部定義的變量都存儲在棧中怠肋,當(dāng)這個(gè)函數(shù)運(yùn)行結(jié)束后,其對應(yīng)的棧就會被回收钉答,此時(shí)杈抢,在其方法體中定義的變量將不...
    Y了個(gè)J閱讀 4,418評論 1 14
  • “新零售”本質(zhì)是零售,但不僅僅是零售 一右蹦、新零售提出(背景) 國內(nèi):10月13日歼捐,杭州云棲大會的開幕式上,...
    牛腩腩閱讀 2,161評論 1 7
  • 見:“我這都是為你好呀贷盲“郏”我們是不是常聽到身邊的親人對自己說這句話?這句話很有可能代表了極強(qiáng)的控制欲球及。 控制型人格...
    晨希yang閱讀 401評論 1 1