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