4個要點,編寫一份接口需求文檔
在產(chǎn)品設(shè)計工作中,或多或少都會需要用到接口,特別是業(yè)務(wù)導(dǎo)向性的系統(tǒng),接口幾乎是必不可少的功能。那么什么是接口?如何寫一份能準確表達業(yè)務(wù)需求的接口需求文檔呢?
一、什么是接口
百科上對接口的定義:API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機制的細節(jié)。
要理解接口是什么,首先理解一下為什么要用接口?
兩個獨立的系統(tǒng),它們的數(shù)據(jù)或程序是獨立的,這就使得它們無法直接訪問對方的數(shù)據(jù)庫或程序(兩個獨立的數(shù)據(jù)相當(dāng)于兩個獨立的家庭,每個家庭肯定是不允許外人隨便進入的,否則會發(fā)生偷竊等后果嚴重的事件)。但是某些業(yè)務(wù)場景下,獨立的系統(tǒng)之間又必須相互共享數(shù)據(jù)或共用一套程序邏輯,如統(tǒng)一業(yè)務(wù)流程上的不同業(yè)務(wù)操作系統(tǒng),下游系統(tǒng)的業(yè)務(wù)依賴于上游系統(tǒng)的數(shù)據(jù)。
既然如此為什么不把它們設(shè)計成一個系統(tǒng),這樣不就沒有上面的問題了嗎?
這是因為有的業(yè)務(wù)流程很長很復(fù)雜,如果設(shè)計成一個系統(tǒng),整個系統(tǒng)變得很龐雜,不論是功能設(shè)計、開發(fā)維護都很難。因此一般都會把雖然有上下游業(yè)務(wù)關(guān)系但又有清晰邊界的業(yè)務(wù)劃分成獨立的系統(tǒng)實現(xiàn),如采購系統(tǒng)和倉儲系統(tǒng)。此外,很多時候我們需要獲取的數(shù)據(jù)是我們外部其他公司擁有的數(shù)據(jù),更不可能設(shè)計成同一個系統(tǒng)了。
基于以上兩點:接口就是兩個獨立系統(tǒng)之間同步數(shù)據(jù)或訪問對方程序的途徑。
二、如何設(shè)計接口
1. 搞清楚是主動訪問還是被動請求:
a. 若是主動訪問,有兩種情況:
一是我方是數(shù)據(jù)的使用方,需要主動從對方獲取數(shù)據(jù);二是我方是數(shù)據(jù)的提供方,需要主動將數(shù)據(jù)同步給對方。
主動訪問時無需做接口,而是訪問對方的接口,要搞清楚的問題是:我們需要在什么節(jié)點訪問對方的接口?是用戶觸發(fā)某個操作的時候?qū)崟r去訪問?還是沒有實時性要求,只是周期性地訪問?
若我方是數(shù)據(jù)的使用方且需要的數(shù)據(jù)是用戶使用某個功能必須的數(shù)據(jù),因此必須在用戶操作時實時去訪問對方的接口獲取數(shù)據(jù)并展示給用戶,典型的有我們注冊某網(wǎng)站時獲取驗證碼的功能。
若我方是數(shù)據(jù)的使用方且需要的數(shù)據(jù)是一些跟用戶實時操作無關(guān)的基礎(chǔ)數(shù)據(jù),如客服系統(tǒng)需要從其他業(yè)務(wù)系統(tǒng)獲取用戶的基礎(chǔ)數(shù)據(jù),以在系統(tǒng)中的某些功能下展示用戶的信息(如客服在處理客訴等問題時,需要知道客戶的一些詳細信息,這些信息只有業(yè)務(wù)系統(tǒng)有)。這種情況下,一般會新增一個腳本定時(如兩小時一次)訪問對方的接口將數(shù)據(jù)獲取過來存儲到自己的數(shù)據(jù)庫,在用到的時候直接從自己數(shù)據(jù)庫獲取并展示。
若我方是數(shù)據(jù)的提供方且提供的數(shù)據(jù)是下游系統(tǒng)需要的實時要求高的數(shù)據(jù)則更多地用實時同步;若是基礎(chǔ)數(shù)據(jù),則選擇周期性同步的方式。
b. 若是被動請求,有兩種情況:
一是我方是數(shù)據(jù)提供方,需要對方來獲取數(shù)據(jù);二是我方是數(shù)據(jù)使用方,需要對方主動將數(shù)據(jù)同步過來。
被動請求需要提供接口供對方訪問,此時要搞清楚:讓對方來訪問的時候,需要提供什么樣的參數(shù)?根據(jù)他提供的參數(shù)我們需要返回什么數(shù)據(jù)?這些數(shù)據(jù)從哪里取值?
若有一些數(shù)據(jù)的來源是本系統(tǒng),其他系統(tǒng)需要使用這些數(shù)據(jù),則可提供接口讓其他系統(tǒng)通過訪問接口獲取這些數(shù)據(jù)。
若我方是數(shù)據(jù)使用方且讓對方將數(shù)據(jù)主動同步過來,此種場景典型如——我們是業(yè)務(wù)的下游,上游系統(tǒng)產(chǎn)生數(shù)據(jù)后,需要將數(shù)據(jù)同步到下游系統(tǒng)讓流程繼續(xù)進行,并且流程的及時性要求高,不能有延遲。這種情況下,只有上游系統(tǒng)知道什么節(jié)點產(chǎn)生了數(shù)據(jù),因此只有等他產(chǎn)生數(shù)據(jù)后主動推送給下游系統(tǒng),因為下游系統(tǒng)因無法知道數(shù)據(jù)生成的時間,也就無法及時去獲取數(shù)據(jù),這時最好的方式是讓對方主動將數(shù)據(jù)同步過來。
2. 搞清楚數(shù)據(jù)交互的實時性要求
a. 對于我方是數(shù)據(jù)使用方的情況,要根據(jù)業(yè)務(wù)的需要決定獲取數(shù)據(jù)的實時性。
如上文所說,如果是用戶使用功能時需要的數(shù)據(jù)就是即時性訪問。如果是定期獲取基礎(chǔ)數(shù)據(jù),根據(jù)我們對數(shù)據(jù)準確性的要求和對方數(shù)據(jù)變更的頻率決定獲取的周期。如我們對數(shù)據(jù)的準確性要求不是100%的要求,且對方的數(shù)據(jù)變更頻率也不是很高,則周期可設(shè)計得長一些,如每天一次,每幾個小時一次等。
b. 對于我方是數(shù)據(jù)提供方的情況,則以對方的業(yè)務(wù)需要為準,但是對于獲取數(shù)據(jù)的訪問量大等特殊情況,應(yīng)在需求中或評審中做好說明和交代,以幫助開發(fā)設(shè)計更滿足需要的接口。
3. 選擇合適的接口方式
結(jié)合接口的不同類型和實時性要求兩方面,可以選擇合適的接口實現(xiàn)方式:
a. mq消息隊列
是一個中間件,數(shù)據(jù)提供方將數(shù)據(jù)放到中間件,數(shù)據(jù)獲取方從中間件中獲取數(shù)據(jù)。針對向多個系統(tǒng)同步基礎(chǔ)數(shù)據(jù)的需要,消息隊列是最適合的方式。
若選擇這種同步方式,要注意的一點是:增量同步還是全量同步,若是增量同步,對方是增量獲取還是全量獲?。咳羰侨客?,在什么情況下,對方應(yīng)該更新數(shù)據(jù),什么情況下應(yīng)該更新數(shù)據(jù)?
b. otter同步
數(shù)據(jù)同步方直接訪問數(shù)據(jù)獲取方的數(shù)據(jù)表將數(shù)據(jù)寫入對應(yīng)的表中,這種方式實時性最高,若對數(shù)據(jù)的準確性要求很高,此方式是很好的數(shù)據(jù)同步方式。
c. http
一般在功能設(shè)計中常用的接口是此種方式,雙方通過http地址保持數(shù)據(jù)同步和通信。
在設(shè)計具體的數(shù)據(jù)同步接口時,具體的方式產(chǎn)品經(jīng)理不用關(guān)注,由開發(fā)根據(jù)需求設(shè)計合理的方式,然后產(chǎn)品可幫助開發(fā)一起確定所選方式是否滿足業(yè)務(wù)需要。除非業(yè)務(wù)上有特殊要求,則在需求中可指定具體的方式。
三、如何編寫接口文檔
不同的接口使用場景,需要關(guān)注的點和交代清楚的規(guī)則不一樣,以主動/被動+數(shù)據(jù)使用方/數(shù)據(jù)獲取方的維度,有以下四種情況:
1. 如果是向?qū)Ψ较到y(tǒng)主動推送數(shù)據(jù),則可按以下方式整理接口需求
2. 如果是對方主動來獲取數(shù)據(jù),則可按以下方式整理接口需求
3. 如果是被動接收對方推送的數(shù)據(jù),則可按以下方式整理接口需求
4. 如果主動從對方獲取數(shù)據(jù),則可按以下方式整理接口需求
PS:在下一篇文章中將以具體的文檔實例來說明不同的場景應(yīng)該考慮和注意的點。書寫過程中一些偏技術(shù)的點應(yīng)及時與開發(fā)咨詢和溝通,防止編寫的文檔與實際出入太大;接口的開發(fā)肯定涉及兩個系統(tǒng),因此在評審前與對方產(chǎn)品對好文檔是必須的,要保證雙方開發(fā)拿到的文檔標(biāo)準是一樣的,否則在開發(fā)過程中會出現(xiàn)雙方約定不一致導(dǎo)致需要修改的情況。
#專欄作家#
果果,人人都是產(chǎn)品經(jīng)理專欄作家。擅長業(yè)務(wù)導(dǎo)向性的產(chǎn)品設(shè)計,以及對業(yè)務(wù)流程的梳理和復(fù)雜問題的拆解,希望能找到產(chǎn)品工作的操作指南和方法論,不斷搭建自己的知識體系
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash, 基于CC0協(xié)議
能在里面加一下示例就更棒了。謝謝
返回參數(shù)是不是只是系統(tǒng)記錄一下,不會在頁面展示吧
這個看實際的業(yè)務(wù)需要,有一些信息是關(guān)鍵的業(yè)務(wù)信息,肯定是要解析轉(zhuǎn)化后展示在界面上的
明白這是給開發(fā)的需求文檔,另外想問 對外的專業(yè)接口文檔 也是產(chǎn)品來寫嗎?有沒有什么標(biāo)準的參考模板?thx
對外的專業(yè)文檔還是由開發(fā)來寫比較好,因為里面要包含實例的;你可以到阿里或騰訊的開放平臺看看,上面有很多開放的API接口文檔,對外專業(yè)的就是那種的
JSON實例怎么寫呢,比如JSON列表這種怎么表達報文???
這種就讓開發(fā)寫,產(chǎn)品不寫這個 哈哈哈
我在迭代的時候會寫。列個表格,包括字段、字段屬性和定義,著重說明想去掉哪些字段增加哪些字段和原因就行。
需求期間就著重寫場景,當(dāng)輸入什么時返回什么也要列表說清。
接手以前的老接口與主干接口時,需要明白用了哪些接口標(biāo)準與協(xié)議,在對應(yīng)接口使用處標(biāo)明,需要有接口本身介紹,錯誤編碼和示例。
但我問了其他產(chǎn)品朋友,有些都不需要寫接口需求,大概每種產(chǎn)品經(jīng)理都不一樣吧。
謝謝麻雀,寫的很好!
謝謝肯定~~
您好,想請教下:
1.這個表格對于簡單的接口會比較容易寫,但是對于里面多個json格式的要怎么寫呢?
2.一般在寫對外的接口文檔中,我們經(jīng)常要列【序號、字段英文名、字段中文名、是否必填、類型】等;您提供的表格是不是用于產(chǎn)品經(jīng)理向開發(fā)提需求的時候用的,而不是開發(fā)對外提供的接口文檔?
3.感覺【字段來源】、【邏輯驗證規(guī)則】提供了新思路,謝謝分享~
是的 我這個只是產(chǎn)品給開發(fā)的接口需求描述文檔,不是向外介紹接口的專業(yè)接口文檔
json格式的我理解應(yīng)該是有主信息和明細信息區(qū)分,可以再分一列來交代是主信息,包含哪些明細
專業(yè)開放接口的文檔還是要參考一些開放平臺上的說明,除了文檔外要加上實例,你可以參考騰訊云、阿里云這些開放平臺上的接口看看
好的,謝謝~
您好,請問向?qū)Ψ较到y(tǒng)推送數(shù)據(jù)時,是對方系統(tǒng)調(diào)用我方接口嗎?;被動接收對方推送的數(shù)據(jù)時,是我方調(diào)用對方接口嗎?
向?qū)Ψ较到y(tǒng)推送數(shù)據(jù)時:是咱們訪問對方的接口,將數(shù)據(jù)推給他
被動接收對方推送的數(shù)據(jù)時:是對方訪問咱們的接口把數(shù)據(jù)推過來
你剛好理解反了 ??
現(xiàn)在明白了,誰主動誰就去調(diào)誰的接口 ??
誰被動誰給接口
是的
增量同步還是全量同步,若是增量同步,對方是增量獲取還是全量獲???若是全量同步,在什么情況下,對方應(yīng)該更新數(shù)據(jù),什么情況下應(yīng)該更新數(shù)據(jù)?
————————————–
增量同步和全量同步是不是貼重復(fù)了,可以再解釋一下嗎,不太懂這兩個的區(qū)別,以及產(chǎn)品經(jīng)理要明確什么,想學(xué)習(xí)一下,謝啦
增量的意思就是:持續(xù)同步新產(chǎn)生的數(shù)據(jù),即每次只同步截止上次同步產(chǎn)生的新數(shù)據(jù)
全量的意思就是:每次都把所有的數(shù)據(jù)都同步過去,不管是否已經(jīng)同步過了
增量接收的意思就是:對方每次接收到數(shù)據(jù)后按新數(shù)據(jù)對待,將接收的數(shù)據(jù)插入到數(shù)據(jù)庫中
全量接收的意思就是:對方每次接收到數(shù)據(jù)后全量更新之前的數(shù)據(jù)(以一定的唯一維度更新),若已有數(shù)據(jù)中沒有的時候才插入新數(shù)據(jù)
這一塊產(chǎn)品只需要作為一個考量因素,具體方案可以在出方案的時候跟技術(shù)一起商討確定;主要還是看業(yè)務(wù)上的情況 以及數(shù)據(jù)的量等因素共同確定
老實說。最后一張表沒看懂。
就是你通過傳參數(shù)的方式從對方接口獲取你想要的數(shù)據(jù);比如傳輸你的姓名,對方給你返回你的姓名、身份證號、手機號等等
標(biāo)題行管的到返回參數(shù)列碼?比如“傳輸給對方的請求參數(shù)”、“狀態(tài)”等,也屬于“字段名稱”嗎?還有表2其實也有這個問題。
也算呀 請求參數(shù)就是一個個字段的 自然就有字段名稱嘛 狀態(tài)本身就是個字段
沒想到你竟然回復(fù)了。
感謝分享
??
下周和合作方對接!我好激動!接口文檔產(chǎn)品要寫嗎?需求里應(yīng)該咋寫
寫需求文檔就行了 按上面的模板寫應(yīng)該可以 但也要看你們的具體要求
學(xué)習(xí)了!!期待下一篇的文檔實例!
m
學(xué)習(xí)了!接口需求沒具體寫過
贊,期待下一篇 ??
寫得好呀。接口文檔可能存在的坑太多了。字段的數(shù)據(jù)源/冪等處理/不同場景下主鍵的選擇。還有最重要的,在面多多個合作方時,如何說服對方使用自己的標(biāo)準API。
寫的很好,接口需求在需求文檔里我從來沒寫過,領(lǐng)教了,希望多寫一些這樣的文章
高手啊
1
謝謝~
接口文檔一般不是開發(fā)寫嗎?
這是需求文檔哦
您好 請問文章可以轉(zhuǎn)載嗎???
要轉(zhuǎn)載到哪里呢?
感覺這應(yīng)該是IT方案需要知道的基本知識,產(chǎn)品只需要知道業(yè)務(wù)場景需要哪些數(shù)據(jù),然后具體實現(xiàn)由SE制定方案
是的 產(chǎn)品就是要交代清楚哪些節(jié)點要跟哪個系統(tǒng)進行什么樣的交互 具體交互方式由研發(fā)定
MQ中丟了,同步增量還是全量
嗯嗯 是的 增量同步還是全量同步 以及增量消費還是全量消費 都要定義好 不然容易出bug
下一篇什么時候出呢
還不一定哈 工作太忙就比較少時間寫 有問題可以先交流??
謝謝~
多謝關(guān)注哦,還不一定啥時候?qū)懲??
產(chǎn)品經(jīng)理如果熟悉架構(gòu)師的工作,的確增加不少競爭力。
??還有很多東西要學(xué)習(xí) 現(xiàn)在還只是淺層的認識