產(chǎn)品設(shè)計(jì)中接口的定義及接口需求文檔的編寫指南
2024-09-21
1. 什么是接口
接口在百科全書中的定義:API(應(yīng)用程序編程接口)是一組預(yù)定義函數(shù),其目的是為應(yīng)用程序和開發(fā)人員提供訪問基于某種軟件或硬件的一組例程的能力,而不必訪問源代碼或了解內(nèi)部工作機(jī)制的細(xì)節(jié)。
要理解什么是接口,首先要明白為什么我們需要使用接口?
兩個(gè)獨(dú)立的系統(tǒng),擁有獨(dú)立的數(shù)據(jù)或者程序,這就使得它們之間無法直接訪問對方的數(shù)據(jù)庫或者程序(兩個(gè)獨(dú)立的數(shù)據(jù)相當(dāng)于兩個(gè)獨(dú)立的家庭,每個(gè)家庭都不能隨意讓外人進(jìn)入,否則將發(fā)生盜竊等嚴(yán)重后果)。但是在某些業(yè)務(wù)場景下,獨(dú)立的系統(tǒng)必須共享數(shù)據(jù)或者一套共同的程序邏輯,比如不同業(yè)務(wù)操作系統(tǒng)在統(tǒng)一的業(yè)務(wù)流程上,下游系統(tǒng)的業(yè)務(wù)依賴于上游系統(tǒng)的數(shù)據(jù)。
既然如此,何不把它們設(shè)計(jì)成一個(gè)系統(tǒng),這樣就不會出現(xiàn)上述的問題了呢?
這是因?yàn)橛行I(yè)務(wù)流程非常長且復(fù)雜,如果設(shè)計(jì)成一個(gè)系統(tǒng),整個(gè)系統(tǒng)就會變得非常復(fù)雜,功能設(shè)計(jì)、開發(fā)和維護(hù)都比較困難。所以,雖然有上下游業(yè)務(wù)關(guān)系但邊界不明確,一般都會把業(yè)務(wù)分成獨(dú)立的系統(tǒng)去實(shí)現(xiàn)網(wǎng)站優(yōu)化,比如采購系統(tǒng)、倉儲系統(tǒng)等。另外,很多時(shí)候我們需要獲取的數(shù)據(jù)是我們之外的其他公司擁有的,更不可能設(shè)計(jì)成同一個(gè)系統(tǒng)。
基于以上兩點(diǎn):接口是兩個(gè)獨(dú)立的系統(tǒng)之間同步數(shù)據(jù)或者互相訪問對方程序的方式。
二、如何設(shè)計(jì)接口 1、分清楚是主動訪問還是被動請求:
a. 如果是主動訪問,則分兩種情況:
第一,我們是數(shù)據(jù)的使用者,需要主動從對方獲取數(shù)據(jù);第二,我們是數(shù)據(jù)的提供者,需要主動將數(shù)據(jù)同步給對方。
主動訪問的時(shí)候,不需要自己創(chuàng)建接口,而是訪問對方的接口。需要明確的問題是:在什么節(jié)點(diǎn)我們需要訪問對方的接口?是在用戶觸發(fā)某個(gè)操作的時(shí)候?qū)崟r(shí)訪問嗎?還是說沒有實(shí)時(shí)性要求,只是周期性的訪問?
如果我們是數(shù)據(jù)的使用方,而我們需要的數(shù)據(jù)對于用戶使用某項(xiàng)功能至關(guān)重要,那么我們就必須在用戶操作的時(shí)候?qū)崟r(shí)訪問對方的接口,獲取數(shù)據(jù)并展示給用戶。一個(gè)典型的例子就是我們在網(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ù)據(jù)并存入自己的數(shù)據(jù)庫,然后在需要的時(shí)候直接從自己的數(shù)據(jù)庫中獲取并展示出來。
如果我們是數(shù)據(jù)提供方,并且我們提供的數(shù)據(jù)是下游系統(tǒng)要求實(shí)時(shí)性要求高的數(shù)據(jù),我們更多的會使用實(shí)時(shí)同步;如果是基礎(chǔ)數(shù)據(jù),我們就會選擇周期性同步。
b.如果是被動請求,則分兩種情況:
第一,我們是數(shù)據(jù)提供方,需要對方獲取數(shù)據(jù);第二,我們是數(shù)據(jù)使用者,需要對方主動同步數(shù)據(jù)。
被動請求是需要提供接口給對方訪問的,這時(shí)候我們就需要搞清楚:對方來訪問的時(shí)候網(wǎng)站開發(fā),我們需要提供什么參數(shù)?根據(jù)他提供的參數(shù),我們需要返回什么數(shù)據(jù)?這些數(shù)據(jù)從哪里來?
如果有些數(shù)據(jù)來自本系統(tǒng),其他系統(tǒng)需要使用這些數(shù)據(jù),那么可以提供一個(gè)接口,讓其他系統(tǒng)通過訪問接口來獲取這些數(shù)據(jù)。
如果我們是數(shù)據(jù)使用方,要求對方主動同步數(shù)據(jù),這種場景很典型例如:我們是業(yè)務(wù)的下游,上游系統(tǒng)生成數(shù)據(jù)之后,需要將數(shù)據(jù)同步到下游系統(tǒng)才能讓流程繼續(xù)進(jìn)行,而流程的時(shí)效性要求很高,不能有延遲。這種情況下,只有上游系統(tǒng)知道數(shù)據(jù)是哪個(gè)節(jié)點(diǎn)生成的,所以只能等它生成數(shù)據(jù)后,主動推送給下游系統(tǒng)。下游系統(tǒng)因?yàn)闊o法知道數(shù)據(jù)生成的時(shí)間,所以無法及時(shí)獲取數(shù)據(jù)。這時(shí)候最好的辦法就是讓對方主動同步數(shù)據(jù)。
2.理解數(shù)據(jù)交互的實(shí)時(shí)性要求
a.如果我們是數(shù)據(jù)用戶,我們需要根據(jù)業(yè)務(wù)需求來決定數(shù)據(jù)采集的實(shí)時(shí)性。
上面提到,如果數(shù)據(jù)是用戶使用功能時(shí)需要的,是即時(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.選擇合適的接口方法
考慮到接口類型的不同和實(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):增量同步還是全量同步。如果是增量同步網(wǎng)站開發(fā),對方應(yīng)該增量獲取數(shù)據(jù)還是全量獲取數(shù)據(jù)?如果是全量同步,對方在什么情況下更新數(shù)據(jù),什么情況下更新數(shù)據(jù)?
b. 同步
數(shù)據(jù)同步方直接訪問數(shù)據(jù)采集方的數(shù)據(jù)表網(wǎng)站模板,將數(shù)據(jù)寫入對應(yīng)表,這種方式實(shí)時(shí)性最高,如果對數(shù)據(jù)準(zhǔn)確性要求很高的話,這種方式是一種很好的數(shù)據(jù)同步方式。