滕 飛
(武警工程大學 裝備管理與保障學院,西安 710086)
大數據(big data),指無法在一定時間范圍內用常規軟件工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產.大數據具有以下特點:(1) 數據體量巨大.可以達到TB、PB 級別;(2) 數據類型繁多,例如網絡日志、視頻、圖片、地理位置信息等;(3) 處理速度快;(4) 商業價值,只要利用合理的分析手段,可以挖掘出數據中潛在的商業價值.在大數據時代,如何充分挖掘出蘊藏于數據資源中的價值正在成為各國 IT 業界,學術界和政府共同關注的焦點[1].2015年中國大數據市場規模達到33.85 億元,2020年大數據交易市場規模達到540 億元.大數據市場不僅規模大,并且呈現快速增長趨勢,為了更好地運用數據資源,目前具有的大數據交易平臺有日本富士通公司的大數據交易集市Data plaza、BDEX、貴陽大數據交易所、數據堂等,開發大數據交易平臺具有重大意義.為解決大數據交易中存在的自身數據不出門、數據交換受制約等問題,并為用戶提供查看樣本數據、根據需求篩選數據集內容等功能,同時創客可以利用平臺購買數據開發相關的應用,并發布在本平臺,本文設計了一種大數據交易集市平臺,并利用Spring MVC 構建后臺整體架構開發出相應的原型系統.
目前的大數據交易平臺主要的模式有:
(1)提供交易平臺,發布數據目錄,不直接提供數據.
(2)發布數據目錄,數據提供方上傳數據并保存.
(3)發布數據目錄,發布銷售數據.
(4)提供采集工具,采集公開網頁數據,收取服務費.
在現有的交易模式中,私有數據所有者出于數據安全的考慮,擔心隱私泄露、數據被濫用、數據被競爭對手利用,往往不愿意交換自己擁有的數據.同時在不同的行業和專業領域之間,彼此難以相互了解對方的數據,靠數據目錄使得數據難以發揮自身的價值.本文提出的大數據交易集市平臺是基于各方的分布式數據和應用建立和運營一個公信的數據和應用服務交易平臺,本系統可以為數據機構提供數據和應用交易樞紐代理,如圖1所示.主要特點如下.

圖1 數據和應用交易樞紐圖
(1)數據由提供者存儲和管理:數據交易集市不直接管理數據,誰的數據誰控制,數據請求發生時由數據代理根據需求從數據所有者獲取數據交給需求方.數據提供者可將數據保存自己公司的服務器上,或保存到本系統提供的Hive 集群中,當發生交易時,系統擁有權限,通過相應的API 接口獲取服務器中的數據集.
(2)提供數據樣本數據:用戶可以在數據商城查看樣本數據集,進一步了解數據商品.
(3)篩選數據集內容功能:用戶可以根據需求選擇需要的字段,過濾掉數據集中無價值的信息.
(4)數據應用可開發:提供數據應用開發環境,滿足基于大數據的創新應用需求.
大數據交易集市原型系統的總體規劃如圖2所示.

圖2 系統總體規劃圖
使用大數據交易集市平臺的有數據機構(數據商品的提供方)、創客(應用程序的開發者)、客戶.
數據機構可以將擁有的數據發布到平臺的數據商城中進行交易,同時把數據集中部分數據作為樣本數據加入到平臺的樣本庫中,創客通過查看樣本數據,決定是否購買相應的數據集.數據機構也可以利用自身擁有的數據的優勢開發應用程序,開發出的應用程序可以發布到平臺的應用商城中,客戶通過應用商城購買需要的應用.
交易平臺會對數據機構提供的數據集、應用程序進行審核,審核通過后才會發布到商城中交易,這樣有效避免數據集中存在違法數據等問題.
大數據交易集市平臺的軟件架構設計如圖3所示.軟件架構從上至下可以分為3 層,分別是SaaS 層[2]、PaaS 層[3]和IaaS 層[4],下面進行詳細的介紹.

圖3 軟件架構圖
SaaS 層:給用戶提供的能力是使用在云基礎架構上運行的云服務提供商的應用程序.本系統的SasS 層中包含前臺、后臺管理系統、應用沙箱.
PaaS 層:平臺即服務作為云計算的一種,是將基礎設施平臺作為一種服務呈現給用戶的商業模式,是一種低成本的方案[5].可以讓用戶使用由云服務提供商支持的編程語言、庫和開發工具等開發應用程序,并在相應的基礎設施上部署.本系統的PaaS 層主要包含緩存模塊、文件上傳下載模塊等.
IaaS 層:它將硬件資源以服務的方式提供給云平臺服務開發商,這樣就對后者屏蔽了基礎設施的異構性[6].用戶可以在云服務提供商提供的基礎設施上部署和運行任何軟件.本系統的IaaS 層主要實現虛擬化、資源調度、安全管理等功能,硬件上有X86 集群、小型集群等.
下面介紹大數據交易集市主要的兩個業務場景.
業務場景一:數據發布和服務代理請求數據,如圖4所示.本系統實現該功能可以分為以下幾步.

圖4 數據發布和服務代理請求調用數據圖
(1)數據交易集市為數據機構A和B 部署交易端,包括數據應用運行容器及數據審計網關;
(2)數據機構A和B 開發可交易數據接口;
(3)數據機構A和B 通過代理注冊可交易的數據,并通過數據采集接口提供樣本數據;
(4)數據請求方通過注冊功能進行數據檢索、察看樣本,找到需求數據;
(5)請求方接受數據使用條款;
(6)代理將數據提取應用部署至數據所有者側A和B,啟動應用對數據進行處理;
(7)處理結果經A和B 過濾、審計后再傳回代理;
(8)如果有多個數據源返回結果,代理對結果進行過濾、融合處理(過濾和審計操作按交易條件可選);
(9)代理將結果傳回請求方.
業務場景二:應用的測試發布、數據和應用服務請求及處理,如圖5.本系統實現該功能步驟如下.

圖5 應用的測試發布、數據和應用服務請求及處理圖
(1) 開發者提出開發請求;
(2)開發者利用樣本數據在應用沙盒中進行數據處理功能和安全性測試;
(3)數據交易集市對提交的應用進行安全和可用性測試后發布至應用商店;
(4)數據交易代理將該應用部署至數據所有者側并完成初始化,等待用戶調用.
Spring MVC 框架實際上是Spring 框架中的Spring Web MVC 模塊[7].其作為Spring Framework的后續產品,融合在Spring Web Flow 里面.Spring MVC可以提供MVC (model view controller)軟件開發模式,并且支持IOC和AOP.
Hive 由Facebook 開發,是一種構建于 Hadoop[8]集群之上的數據倉庫應用,旨在實現 Hadoop 上的數據操作與傳統 SQL的結合[9].在Hadoop 中用來處理結構化數據.開發人員直接使用Hadoop 會面臨學習成本太高、項目周期要求太短、MapReduce[10]實現復雜查詢邏輯開發難度大等問題.Hive 通過將結構化的數據文件映射為一張數據庫表,并提供類 SQL 查詢接口,本質是將 SQL 轉換為MapReduce 程序,提供快速開發的能力,有效減少開發人員的學習成本.
在本文提出的大數據交易模式中,由數據提供方在大數據交易集市平臺上發布數據及相關的應用,數據需求方根據需要在平臺購買相應的數據集或服務,如圖6所示.

圖6 總體實施方案圖
數據交易集市有前臺和后臺管理系統組成.前臺主要模塊是門戶模塊,該模塊又可以分為多個子模塊,下面詳細介紹幾個主要的功能模塊.
(1)數據商城模塊實現數據商城列表、商品詳情.展示數據機構發布的所有數據商品,方便有需求的買家挑選購買.
(2)應用商城模塊實現應用商城列表、商品詳情.展示創客發布的所有應用商品,方便有需求的買家挑選購買.
(3)API 商城模塊實現API 商城列表、商品詳情.展示商家發布的所有API 商品,方便有需求的買家挑選購買.
(4)個人中心模塊實現個人信息、用戶認證、賬戶安全、白名單管理、消息通知等功能.
(5)購物車模塊,用戶購物活動中的購物車,類似在淘寶、京東中的作用.
(6)買家中心模塊實現管理已購數據、已購應用、已購API.
(7)賣家中心功能有統計分析、已售數據、已售應用、已售API、數據發布、應用發布、API 發布、應用鑒權等.
(8)數據和應用發布,展現賣家發布的數據和應用商品情況列表,支持用戶發布數據和應用商品,通過審核以及數據機構應用鑒權后,可上架銷售.
后臺管理系統由3 部分組成,其中數據及應用注冊模塊,主要實現數據集及應用的定義及發布、元數據管理、抽樣數據管理、數據交易記錄等功能.數據代理模塊,數據代理是數據交易的核心功能,主要實現數據應用的部署及清理、需求數據獲取及返回結果過濾或合并等.
應用管理模塊,主要為應用開發者提供開發環境及上線應用的管理等功能.其中應用沙箱主要用于應用開發,開發者可以在應用沙箱中利用樣本數據進行應用開發,測試完成的應用可通過發布功能在應用商店進行發布.
編程語言:Java;開發工具:STS (Spring tools suite);操作系統:Windows 10;數據庫:MySQL 5.7;JDK 版本:JDK 1.8 版本;瀏覽器:Google Chrome;機器:Lenovo ThinkPad T470;內存:4 GB 以上;硬盤:500 GB 以上;集群環境:Hadoop/Hive 集群是由 5 臺與單機服務器組成.每臺服務器上安裝Ubuntu 系統,并安裝配置Hadoop-2.7.3和Hive1.2.
數據交易集市平臺采用前端分離的模式開發,整個系統有3 個子項目組成,datamarket (大數據交易集市門戶系統)、bjmarketportal (大數據交易集市后臺管理系統)、datamarketReact (大數據交易集市前端頁面).如圖7,datamarket和bjmarketportal 通過RESTful API和datamarketReact 頁面進行交互.后臺使用Java 語言在STS 中開發.前端頁面系統datamarketReact 采用React 框架[11]開發,使用webpack 前端構建工具,采用es2016 新一代JavaScript 編碼模式,頁面中的圖表展示使用到echarts,前端可以通過后臺的RESTful API與后臺進行交互.

圖7 工程架構圖
后臺部分使用Spring MVC 框架構建項目整體架構,并采用了經典的Web 3 層架構模型,MVC 模式把應用程序拆分成3 個部分:模型,視圖和控制器[12].即從高到低次是Controller 層、Service 層和Dao 層,下面進行詳細的介紹.
本項目在開發中,通過在STS 中配置maven-3.5.0實現對Jar 包的管理,并在maven[13]的配置文件settings.xml 中完成指定本地倉庫地址,設置阿里云鏡像,部分代碼如下所示.通過maven 避免了開發人員手工添加Jar 包和Jar 包版本沖突的問題.

<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>
在傳統的單體架構[14]中,登錄用戶的信息往往保存在session[15]中,當登錄用戶增多不僅會增加服務器的壓力,同時在分布式應用上,會限制負載均衡器的能力和應用的擴展性,本項目采用基于JWT (JSON Web token)[16]的認證方式,通過pom.xml 文件實現在Spring MVC 框架中集成JWT.
在數據庫的操作方面,MyBatis的優勢在于利用配置文件,不需要在代碼中編寫SQL 語句[17].MyBatis Generator 插件可以根據表結構生成JavaBean.本系統實現了Spring MVC和MyBatis、MyBatis Generator的集成.pom.xml 配置文件部分代碼如下:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency>
大數據集往往需求較大的存儲空間,為滿足業務需求,本系統使用MySQL 保存用戶信息、商品詳情、樣本數據等信息,使用Hive 保存存儲數據公司提供的數據集.
在接口測試方面,實現了Spring MVC和Swagger框架的集成,Swagger是一個簡單又強大的RESTful 風格的API 生成文檔工具.pom.xml 配置文件部分代碼如下:

?
項目在Spring MVC 框架中還集成了分頁插件pagehelper、lombok、Redis 等技術.
在大數據交易集市平臺中,用戶瀏覽數據商城,查看樣本數據集,以及查看個人信息等操作都會涉及到對數據庫進行I/O 操作.當用戶訪問量增大,對數據庫會進行頻繁的讀寫操作,系統在性能上會出現瓶頸,本文采用NoSQL 技術解決這一問題.Redis[18]是現在最受歡迎的NoSQL 數據庫[19]之一,Redis 包含多種數據結構、支持網絡、基于內存、可選持久性的鍵值對存儲數據庫.本文采用Redis 實現系統的高訪問機制,當用戶從系統獲取數據時,系統會首先從Redis 中查找,如果沒有找到,再從數據庫中讀取,有效提高系統讀取數據的性能,緩解數據庫訪問壓力,過程如圖8所示.

圖8 Redis 緩存機制
3.5.1 RESTful API 介紹
API (application programming interface,應用程序編程接口)[20]用來提供應用程序與開發人員基于某軟件得以訪問的一組例程,而開發人員無需關心其內部工作機制的細節.在REST (representational state transfer)中每個資源由URI 標識,RESTful[21]是一種架構的規范與約束,通過POST,GET,PUT,DELETE 操作對資源進行CRUD[22]操作.
3.5.2 權限驗證流程
系統提供的所有API 必須通過認證鑒權才可使用.權限驗證流程如圖9所示.用戶登錄系統時,前端會向后端傳入登錄驗證信息,如表1所示.

表1 用戶登錄信息表

圖9 權限驗證流程圖
驗證成功后,服務器端會生成Token.之后將Token和該用戶的權限保存到Redis 中,如表2所示.

表2 Token 信息表
本系統的Token 由隨機字符串、用戶名稱、時間戳拼接后md5 摘要生成,60 min 過期.
3.5.3 接口設計
接口數據傳輸采用HTTP 協議,提交和返回數據都為JSON 格式[23],并統一采用UTF-8 字符編碼.Spring MVC 框架中使用@RequestBody 注解把前端發送的JSON 字符串轉為Java 對象,使用@ResponseBody注解把后臺Java 對象轉換JSON 字符串.在返回數據方面,失敗時re_message 字段返回失敗原因.下面通過本系統的后臺管理bjmarketportal 項目中數據商品管理模塊詳細介紹API 接口的設計.數據商品管理模塊主要實現數據商品信息維護,數據商品審核、發布等功能.數據商品管信息管理模塊的API 接口設計如表3.

表3 數據商品管理模塊接口
下面重點介紹其中的根據id 查詢數據商品詳情,接口鏈接地址:/api/v1/ datacommodity{id},id是用戶從前端提交的請求參數,請求方式是GET 類型,后端根據商品的id 從數據庫中查找商品詳情信息,如表4.

表4 數據商品表
查詢結果會以成JSON 格式發送到前端頁面,當查詢成功時返回結果如下所示:

{“data_commodity_id”:12,“data_set_commodity_name”:全國天氣數據集,“data_charge_type_code”:“2”,“img”:“nofile”,“file”:“nofile”,“data_charge_price”:“950”,“data_desc1”:“全國天氣數據集簡介”,“data_desc2”:“可以按照日期和城市查詢天氣數據”,“data_desc3”:“天氣預報,應急救災”,“data_desc4”:“數據分析,機器學習”,“example_is_download”:“1”,“data_type”:“txt 文本”,“data_single”:“1”,“sale_counts”:150}
后臺執行成功,將數據添加到數據庫中,如果執行失敗,會將失敗信息以JSON 格式發送到前端,如下:

?
數據集購買功能位于datamarket 項目的數據商城模塊中,數據商品可以按照行業分為政府、醫療、金融、電商、汽車、房地產、教育、旅游等.大數據具有量大、價值密度低的特點,用戶在使用數據集進行數據分析、開發應用軟件時,往往不會使用到數據集中的所有數據,需要清除掉無價值的信息,本系統在購買數據商品功能基礎上,提供查看樣本數據、按照字段篩選數據等功能.
數據機構首先上傳數據商品的詳情信息和樣本數據,后臺管理員審核通過后,會將數據商品發布到數據商城中.創客根據自身需求,查看數據商品詳情和樣本數據,選擇合適的數據商品,完成支付后,可以下載相應的數據集,并且可以使用數據商城提供的數據篩選功能去除數據集中無價值的信息.下面通過數據機構A 提供的全國天氣數據集National_weather_data 詳細介紹數據商品購買功能.
全國天氣數據集National_weather_data 記錄了2000年到2018年全國各個城市每一天的天氣數據,每條記錄字段包含:城市、日期、天氣狀況、最高氣溫、最低氣溫、風力風向,如表5所示.

表5 全國天氣數據樣例表
數據機構A 首先上傳該數據集的詳情信息和對應的樣本數據.數據機構首先創建樣本數據集對應的表結構,填寫每個字段名稱、字段的數據類型等,如圖10.

圖10 設置樣本數據集
數據機構A 提交信息后,后臺會在MySQL 數據庫中創建對應的表,使用MyBatis 框架實現動態創建表結構,把樣本數據名稱作為表名,字段名稱和數據類型作為表的屬性和相應的數據類型.之后數據機構A 在系統中填寫樣本數據表記錄,樣本數據表的記錄行數一般在10-50 行之間,部分代碼如下:

?
系統管理員會對數據商品的介紹信息和樣本數據內容進行審核,檢查數據商品是否符合商城的規定,有無違法信息,審核通過后授權數據機構向Hive 集群上傳數據商品.
為確保數據提供者的數據安全性,系統會向數據提供者提供Hive 集群資源,數據提供者可以上傳、修改、查看、刪除數據集,數據機構和客戶達成購買協議,并完成交易后,數據交易集市才可以獲得相應數據集的獲取權限,數據代理根據需求從數據所有者獲取數據交給客戶.下面通過national_weather_data 數據集進行詳細介紹.
數據機構A 將數據集中的數據保存到txt 文件中,命名為national_weather_data.txt,文件中每一行代表一條數據記錄,每條數據記錄中的一列代表一個屬性值,每個屬性之間用英文逗號隔開.當數據商品詳情和樣本數據被后臺管理員審核通過后,會通過數據商城的API 接口將national_weather_data.txt 中的數據導入到Hive 集群中管理,過程如圖11所示.

圖11 數據機構上傳數據商品圖
Hive 集群保存數據集的過程如下:
(1)表名以及表中的字段名稱和樣本數據表national_weather_data 相對應,MySQL 中的字段數據類型,VARCHAR和FLOAT 分別對應Hive 中的string和int 類型.
(2)為保證數據集內容的充足性,系統輸出審計功能會檢查txt 文件的行數,當行數小于100 行時,停止上傳數據,并反饋數據機構數據量過小,不符合要求.同時隨機抽取其中5 行記錄供管理員查看,審查其內容是否符合數據商品的詳情描述,部分代碼如下:

if [${BEFOR_VALUE}-lt 100 ];then echo "`date`-FAILURE count(*)=$BEFOR_VALUE"echo "FAILURE"
(3)數據機構向管理員提供Hive 表的分區字段,national_weather_data 表的分區字段是year和city.
(4)后臺程序生成建表語句,如下所示,在Hive 集群中建立表結構.

create table national_weather_data(year string,date string,city string,maximum_temperature int,minimum_temperature int,weather string,wind_direction string,wind_rating int,)PARTITIONED BY (`year` string,`city` string)ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' NULL DEFINED AS ''STORED AS TEXTFILE;
(5)執行導數腳本,把txt 文件中保存的數據導入到Hive 集群中,執行腳本時需要傳遞3 個參數,table_name表名,year年份,city 城市.

LOAD DATA LOCAL INPATH '${FILE_NAME}' OVERWRITE INTO TABLE ${table_name} partition (year='${YEAR}',city='${CITY }');"
(6)數據集上傳結束后,為確保數據集上傳成功,系統審計功能會檢查上傳到Hive 中的數據集行數,如果小于txt 文件的行數,則向數據機構反饋,數據上傳失敗.部分代碼如下:

echo "hive table rows:$AFTER_VALUE"if [$AFTER_VALUE-ne $BEFOR_VALUE ];then echo "`date`-FAILURE:AFTER_VALUE(*)=$AFTER_VALUE<>BEFOR_VALUE(*)=$BEFOR_VALUE "echo "FAILURE"current_2=`date+%s`current_dura=`expr $current_2-$current_1`
數據商城提供數據集的信息篩選功能,客戶可以根據數據集的字段選擇需要的數據,去除無用的數據項,如圖12所示.后臺系統會根據用戶選擇的字段生成HQL[24]語句,從Hive 集群中將相應的數據導出到txt 文件中,之后用戶可以下載相應的txt 文件.在商品支付方面,創客可以通過支付寶、微信、網銀等手段完成支付,這個過程類似淘寶、京東等網站商城.

圖12 選擇需要的字段
用戶注冊如果想要成為買家、賣家、創客等,就需要進一步認證.認證通過后,用戶就擁有購買、使用商品的權限,可以發布、管理商品,甚至成為一名平臺創客,申請創客空間資源,開發、測試、運行應用.認證分為個人認證和企業認證.
企業認證需要用戶提供公司名稱、地址、三證合一號碼、營業執照副本,以及運營者姓名、身份證號、聯系方式、持證照正反面等信息,如圖13所示,如確認用戶信息真實有效,提出申請后7 個工作日內就會得到回復.如被駁回,按照駁回原因,重新修改提交.

圖13 企業認證
下面詳細介紹企業認證功能的實現.用戶點擊提交按鈕后,前端會調用bjmarketportal 項目中的企業認證接口,接口地址是/api/v1/enterprisecertification,訪問方式是POST,表單中的數據會以JSON 格式發送到后臺.bjmarketportal 中實現企業認證功能的代碼由Controller層、Service 層、Dao 層、Pojo (plain ordinary Java object)、Vo (value object)等幾部分組成,下面詳細介紹后臺企業認證功能的實現.
Pojo:Pojo 類可方便開發人員使用數據庫中的數據表.通過MyBatis Generator 插件從MySQL 數據庫中生成企業認證信息表對應的Pojo 類—CorporateInformation.
Vo:常用于業務層之間的數據傳遞,可以用于封裝從頁面表單提交的數據.該模塊中Enterprise CertificationVo類用于封裝企業認證表單數據.
Controller 層:接收客戶端的請求,然后調用Service層業務邏輯,獲取到數據,傳遞數據給視圖.Corporate Information Controller 類對應該模塊Controller 層代碼.類中使用@Autowired 注解實現Service 層Corporate Information Service 對象的自動裝配;并創建enterprise Certification 方法實現企業認證功能,通過@Request Mapping 注解,設置該方法的訪問路徑/api/v1/user Center/enterprisecertification,訪問方式是POST.
Service 層:用于實現模塊中的業務邏輯Corporate-InformationService 類對應該模塊的Service 層代碼,通過@Service 注解聲明其是一個Service 類,并自動注冊到Spring 容器中;通過@Autowired 獲取Dao 層CorporateInformationMapper 對象;certification 方法實現企業認證功能.
Dao 層:負責模塊中數據庫操作,CorporateInformationMapper 類對應該模塊中的Dao 層代碼,采用MyBatis 框架實現,通過@Mapper 注解其是一個Dao層類,并交給Spring 容器管理,同時省去了mapper 映射文件的書寫.該模塊部分代碼如下:

@Controller@RequestMapping(value="/mail/userCenter")public class CorporateInformationController extends BaseController<Object>{@Autowired private SandboxieService sandboxieService;@Autowired private CorporateInformationService corporateInformationService;@Autowired private DataShopService dataShopService;@RequestMapping(value="enterprisecertification",method=RequestMethod.POST)@ResponseBody public String enterpriseCertification(EnterpriseCertificationVo enterpriseCertificationVo,HttpServletResponse response) throws Exception {String enterpriseName=enterpriseCertificationVo.getEnterpriseName();

if (corporateInformationService.isEnterprise(enterpriseName)) {…}…}
本文設計的大數據交易集市平臺,通過向數據機構提供公用的Hive 集群資源,實現數據交易集市不存儲數據,數據由提供者存儲和管理,在商城發布數據商品的詳情信息、樣例數據供客戶查看,由數據代理獲取數據交給需求方,有效解決了數據交易中私有數據持有者擔心數據泄露,不愿意分享數據的問題.同時設計出數據發布和服務代理請求數據、應用的測試發布、應用服務請求業務流程.并在此基礎上使用Spring MVC 框架,并集成了MyBatis、Swagger 等技術開發實現了大數據交易集市平臺,利用Redis 解決系統在高并發下中性能下降問題,采用基于RESTful 風格的API 接口設計,最后通過數據集購買功能和企業認證功能詳細介紹了項目的實現,并且系統具有前后端分離、低耦合高內聚以及易擴展性.