開放平臺架構指南

来源:https://www.cnblogs.com/xiaoyangjia/archive/2022/06/14/16376690.html
-Advertisement-
Play Games

廣義的開放平臺是個龐大的結構,它站在核心業務系統的前面,承接著所有的流量。公司所有的客戶端比如Web站點、手機APP、智能硬體都對接開放平臺API,只是各自的許可權不同,可以訪問的資源不同。狹義的開放平臺只是打開了一扇門,讓合作伙伴進來參與業務互動。從業務層面上看,開放平臺屬於流量渠道之一。本文重點討... ...


1.前言

2010年前,大型社交網站如騰訊QQ、新浪微博都搭建了開放平臺。中小型互聯網公司接入開放平臺,能夠獲取社交平臺的海量用戶,有效的降低獲客成本,獲得社交平臺的其他能力。對於用戶而言,用一個社交帳號登錄各種網站或APP,體驗也會更好。後來,許多行業如電商、金融等都開放了業務核心API。這些行業的競爭非常激烈,公司希望通過開放平臺與合作伙伴保持更高效的協作,實現資源交換或者流量變現。

廣義的開放平臺是個龐大的結構,它站在核心業務系統的前面,承接著所有的流量。公司所有的客戶端比如Web站點、手機APP、智能硬體都對接開放平臺API,只是各自的許可權不同,可以訪問的資源不同。狹義的開放平臺只是打開了一扇門,讓合作伙伴進來參與業務互動。從業務層面上看,開放平臺僅僅是流量渠道之一。

本文重點討論的是狹義的開放平臺。

2.需求分析

2.1 總體需求

業務系統相當於酒店,開放平臺是專門招待外賓的特殊客房,合作伙伴(以下統稱商戶)就是外賓。外賓進入酒店有專門的通道,不和其他客戶的共用。外賓可以在房間睡覺、點餐,但是不能去其他房間串門。主觀上,酒店希望接納更多的外賓,但是招待能力始終有上限,因此一定要限制外賓活動的頻率,否則沒有足夠的人力招待其他的住客。在系統設計上,開放平臺有四個重要的要求:

  • 1)介面訪問授權:商戶帳號僅能訪問被授權的介面,也不允許訪問到其他商戶的資源。
  • 2)介面訪問限流:商戶訪問介面必須限流,不能對公司的核心系統造成衝擊。
  • 3)內部業務隔離:商戶最忌諱介面出入參數頻繁變化,內部系統要做好業務規劃和多版本設計,儘可能保證介面出入參數不變動。
  • 4)數據安全:加密敏感數據,比如用戶手機號、銀行卡號。
2.2 平臺角色

開放平臺的使用者只有兩個:商戶和平臺管理員,平臺管理員可以劃分為超級管理員、商務經理、產品經理。

  • 1)超級管理員:擁有最高系統管理許可權。
  • 2)商務經理:商務經理負責與商戶洽談合作事宜,審核商戶資料的真實性,推動合作的進度。
  • 3)產品經理:產品經理根據商務經理與商戶簽訂的合同,確定產品流程的細節,解答商戶的業務疑問,聯合開發人員協助商戶對接API。如果有需要,甚至要為商戶設計新的API。
2.3 項目構成
  • 1)開放API

商戶的開發水平和意願不一樣,接入方式可以分為三種:

  1. 全API:商戶端技術人員開發前端頁面,後端調用開放平臺API,包裝為自己的前端介面,串聯這些前端介面完成產品流程。
  2. 內嵌H5:商戶端技術人員在產品的合適位置嵌入開放平臺提供的H5地址,用戶可以打開這個地址,完成產品流程。
  3. 內嵌SDK:開放平臺提供Android或IOS平臺的SDK,商戶端技術人員自行集成在產品中,完成產品流程。
  • 2)商戶服務系統

商戶服務系統至少包含商戶入駐、參數配置功能,部分業務還需要佣金結算、訂單統計等功能。

  1. 商戶入駐:商戶先提交企業資料,商務經理審核通過之後,商戶才能正常訪問開放API。
  2. 參數配置: 配置對接開放API的一些參數,比如接入方式。
  • 3)商戶管理系統

商戶管理系統主要用於查詢、修改、編輯商戶信息、審批商戶的配置信息以及其他輔助功能。

3.系統架構

3.1 系統架構

採用成熟的分散式組件實現架構,如下圖所示:

3.2 業務邊界

為了業務的整體可控,核心業務系統不應該迎合開放平臺的變化,而是開放平臺適配核心系統。開放平臺的業務邊界是只做渠道功能,不做核心業務,通過調用核心系統的介面完成業務操作。

3.3 數據閉環


核心系統沒有意願保存商戶ID或者其他與渠道有關的數據,數據閉環是指商戶發起的請求(比如創建訂單),先保存在開放平臺的資料庫,開放平臺再向核心系統發起請求。這份數據並不需要特別完整,但是至少包含業務主鍵。當有需要的時候,通過查詢核心系統介面來彌補缺失的數據。自主冗餘數據的好處有兩點:1.減少了調用鏈,加快介面查詢速度;2.更容易實現根據商戶ID分頁查詢數據、訂單統計、佣金結算等功能。

4 API設計

4.1 RESTful風格

介面設計遵循 RESTful 協議,它有下麵的特性:

  • 資源是由 URI 來指定,URI 中可以包含請求參數。
  • 對資源的操作如獲取、創建、修改和刪除,要採用 HTTP 協議提供的動作標識 如GET、POST、PUT 和 DELETE 等。
  • 資源的表現形式可以是XML、HTML、JSON,多數採用JSON。

採用RESTful API的好處有三點:

  • 基於HTTP協議,輕量級,使用廣泛
  • 介面設計面向資源,具有自解釋性。
  • 以 XML,JSON 做數據交換,格式簡單。

在實際的運用中,嚴格遵循 RESTful 協議有下麵三點缺陷:

  • 1)HTTP動詞過多

開發人員使用過多的HTTP動詞,心智負擔較大;用動詞標記操作資源滿足不了複雜的業務需求,最後還得通過介面名稱來區分;某些請求如 PUT、DELETE 可能被中間層設備過濾掉。

  • 2)URL支持參數

URL裡面包含參數占位符比如GET /Api/Orders/{id}/OrderItems/{id},閱讀性不佳。如果根據 URL 來統計介面調用次數,分析系統需要額外處理相同地址不同參數的情況。

  • 3)HTTP狀態碼表現力不足

通過20X、30X、4XX、5XX等有限的響應碼無法表達複雜的業務狀態。

為瞭解決以上三點缺陷,建議介面遵循如下規範:

  • HTTP 動詞僅採用 GET、POST。
  • URL裡面不允許使用參數占位符。
  • 返回結果採用自定義的業務狀態碼。

通常每個介面都有一個資源地址,為了更靈活些,可以設計為僅有一個入口地址,在參數裡面增加介面名稱,來區分不同的業務操作。參考淘寶API文檔,如下所示:

請求地址:http://gw.api.taobao.com/router/rest
請求參數:

名稱 類型 必須 描述
method String API介面名稱,例如:taobao.user.buyer.get
timestamp String 時間戳,格式為yyyy-MM-dd HH:mm:ss,時區為GMT+8,例如:2015-01-01 12:00:00
4.2 分類原則

遵循MECE原則,根據業務領域進行介面分類。

MECE(發音me see)是Mutually Exclusive Collectively Exhaustive的縮寫,意思是“相互獨立,完全窮盡”,也就是對問題的分析,能夠做到不重覆、不遺漏,從而直達問題的核心,並找到問題的解決方法。由《金字塔原理》作者巴巴拉·明托1973年發明,也是麥肯錫思維過程的一條基本準則。

4.3 版本管理

不同版本的相同介面,將版本號標識統一後置,如下所示:

# 老版本
http://openapi.test.com/order/create_order
# 新版本
http://openapi.test.com/order/create_order/v2
4.4 返回數據

所有介面的返回數據都採用固定的JSON格式,如下所示:

{
  "code":200,
  "msg":"OK",
  "data":{
    "order_id":"2012120112304512",
    "product_name":"男士衛衣"
  }
}
  • code:父編號,一般是請求成功、異常等標識。
  • msg:父編號信息,一般是請求結果的信息提示。
  • data:具體的業務數據。
4.5 安全措施
  • 1)介面MD5簽名
  1. 對所有API請求參數(包括公共參數和業務參數,但除去sign參數、值為空和值為數組類型的參數),根據參數名稱的ASCII碼表順序升序排列,比如:foo=1, bar=2, foo_bar=3, foobar=4排序後的順序是bar=2, foo=1, foo_bar=3, foobar=4。

  2. 將排好序的參數名、參數值用&拼裝在一起,採用utf-8編碼,比如:bar=2&foo=1&foo_bar=3&foobar=4。

  3. 在拼裝的字元串尾部加上預先分配的密鑰值 secret_value 後,再進行MD5演算法摘要,如:md5(bar=2&foo=1&foo_bar=3&foobar=4&secret=secret_value)。

  • 2)數據加密

加密敏感數據比如用戶信息,常見加密演算法可以是RSA或者AES。

  • 3)IP白名單

在介面訪問的前置層,只允許在白名單里的IP的請求。商戶通過商戶服務系統自行管理IP白名單。

4.6 數據推送

數據推送是指系統主動通知商戶數據的變化,滿足部分商戶對數據的實時性要求。舉個例子,商戶創建訂單成功,通過訂單查詢介面GET http://openapi.domain.com/query_order獲得訂單狀態。如果商戶希望儘快知道訂單狀態,可以定時輪詢訂單查詢介面,但是效率低且浪費資源。系統主動通知商戶訂單的狀態,能有效解決這個問題。商戶需要按規範開發介面,接受指定格式的數據。數據推送增加系統了的複雜性,又會造成兩個問題:

  • 業務狀態的順序性

訂單有多個狀態而且有業務順序性,由於網路延遲的未知性,訂單狀態數據可能無序的推送給商戶,這時商戶可以通過業務邏輯去保證訂單狀態的正確性。

  • 推送數據可能遺漏

系統推送數據一般採用MQ非同步發送,即便有手段保證消息不丟失,但是商戶的網路故障依然會造成推送失敗。這種故障有兩個方式解決:1.系統在T+1時段提供T日的對賬文件,裡面包含訂單號和訂單狀態,商戶根據對賬文件批量更新遺失的訂單號狀態;2.商戶定時輪詢訂單狀態。

4.7 API文檔

為了便於商戶查閱和測試API,採用 https://www.apifox.cn/ 管理API文檔。

作者:編碼磚家
公眾號:編碼磚家
出處:https://www.cnblogs.com/xiaoyangjia/
本文版權歸作者所有,任何人或團體、機構全部轉載或者部分轉載、摘錄,請在文章明顯位置註明作者和原文鏈接。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文介紹 SQL CASE 表達式,它是 SQL 中數一數二的重要功能,CASE 表達式的語法分為簡單 CASE 表達式和搜索 CASE 表達式兩種。 本文重點 CASE 表達式分為簡單 CASE 表達式和搜索 CASE 表達式兩種。搜索 CASE 表達式包含簡單 CASE 表達式的全部功能。 雖然 ...
  • 前言 短視頻模板,是快捷創作短視頻的一種方式,一般由專業設計師或模板創作人製作,用戶只需替換視頻模板中的部分素材,便可生成一支與模板一樣的創意視頻。這種省時省力、無需“燒腦”構思創意的“套模板”視頻創作方法,深受用戶喜愛。 應用場景 短視頻模板在短視頻APP、視頻剪輯工具、拍攝美化工具、旅游出行、電 ...
  • 前言 由於最近在使用vue3寫項目,使用vue3的前提就是要學習TypeScript,TypeScript算是JavaScript的升級版,TypeScript包含JavaScript和自己的一些特性 介紹 TypeScript是一種由微軟開發的開源、跨平臺的編程語言。它是JavaScript的超集 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 Pinia優勢 Pinia是一個全新的Vue狀態管理庫,是Vuex的代替者,尤雨溪強勢推薦 Vue2 和 Vue3 都能支持 拋棄傳統的 Mutation ,只有 state, getter 和 action ,簡化狀態管理庫 不需要嵌套 ...
  • HtmlParse 是一款基於windwos平臺的HTML文檔解析工具,可快速構建DOM樹,從而輕鬆實現網頁元素的爬取工作。DOM樹就是一個HTML文檔的節點樹,每個節點由:標簽(Tag)、屬性(Attribute)、文本(Text)三個值來描述。 所謂的HTML文檔解析,指的就是如何構建一顆DOM ...
  • 最近在業務中實際使用 content-visibility 進了一些渲染性能的優化。 這是一個比較新且有強大功能的屬性。本文將帶領大家深入理解一番。 何為 content-visibility? content-visibility:屬性控制一個元素是否渲染其內容,它允許用戶代理(瀏覽器)潛在地省略 ...
  • 在我們進行前端開發時,針對項目優化,常會提到一條:針對較小圖片,合理使用Base64字元串替換內嵌,可以減少頁面http請求。 並且還會特別強調下,必須是小圖片,大小不要超過多少KB,等等。 那麼,Base64又到底是什麼呢? 初步認識 下麵的這段字元串,應該是大家都很常見的。通過這種固定的格式,來 ...
  • Install 1. git clone https://github.com/snail-boy/snail-player-native.git 2. 拷貝lib目錄下的文件到自己項目里 Usage 直接運行index.html <!DOCTYPE html> <html lang="en"> < ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...