天天看點

系統架構設計實戰:API管理平台選型

作者:MobotStone

一、目标

建設一個高效、易用且經濟實惠的API管理平台,滿足API的建立、管理、測試、文檔管理和權限管理需求,并支援第三方API工具導入,以提升項目多系統、多服務API使用效率和團隊協作效率。

二、現存問題:

  • API測試覆寫率低,隻在接口研發完成時做少量本地測試。
  • 由于業務邏輯變更,早期開發的接口可能報錯或失效。
  • 代碼無法持續重構與演進,因為擔心影響業務邏輯。

三、需求分析

  • 易用性: 快速生成或批量導入接口定義和入參定義,支援持續內建。
  • 可擴充性: 接口入參可配置,可以自定義Header、Cookie資訊。
  • 測試報告: 支援自動化測試,生成測試報告,并能持續內建。
  • 資料模拟(Mock): 前端開發人員可以根據接口定義配置Mock Server進行并行開發。
  • 持續內建: 開發人員合并代碼時,自動觸發接口測試,確定主流程不受影響。
  • 個性化需求: 支援前置與後置代碼編寫,滿足不同團隊的個性化需求。
  • 多系統一體化: 支援多個系統的API內建在一個平台。

四、技術選型和對比分析

1、選擇标準

我們的需求,找到一款開源、廣泛使用、能無縫對接Swagger、smart-doc規範(不用手工定義一個個接口),支援自動化測試流程、對前端支援Mock資料的工具。

2、篩選

在目前API管理平台的海量選擇中,一些有着廣大使用者群和良好口碑的平台分外引人注目,例如Apifox、APIPost、Swagger、YAPI、Eolinker和EasyAPI等等。然而,考慮到開源認證與合規風險,我們必須對選擇進行審慎考慮。

對于國外的産品,由于可能存在的合規風險和其它問題,我們的選擇焦點僅集中在了最為老牌且知名的Swagger上,而其它的都被逐一排除。同時,如果産品采用了GNU AGPLv3和商業許可的雙重授權方式,我們也直接将其排除在選擇範圍之外,以避免後續可能的法律糾紛。

在經過這些篩選後,我們最終收集到了8款滿足條件的API管理平台。在對這些平台進行初步了解和簡單操作後,我們發現這些平台不僅功能強大,同時也各有其獨特的特色和優勢。

但是,為了進一步提煉我們的選擇,并找到最适合我們需求的平台,我們決定引入更多的篩選條件,并采用積分制進行評估。具體的評分标準如下:免費私有部署(5分)、團隊協作能力(0-3分)、工作流覆寫能力(0-7分)、學習成本(1-2分)以及其它擴充功能(0-2分)。通過這種方式,我們期待能夠更精确、更有效地找到我們團隊的最佳選擇。

api管理平台

私有

<5>

調試

<1>

mock<1> 項目管理<1> 團隊協作<3> 測試用例<2> 自動化測試<1> 性能測試<1> 複雜度<2> 代碼生成<1> 擴充工具<1> 定位<1> 綜合分
wiki 簡單 開發 7
postman 支援 類同 支援 普通 支援 測試 13
apifox 收費 支援 支援 支援 支援 普通 支援 支援 團隊 14
apipost 收費 支援 支援 支援 普通 支援 支援 團隊 13
swagger 支援 支援 普通 普通 支援 開發 12
yapi 支援 支援 較強 較強 支援 普通 支援 支援 團隊 17
eolinker 收費 支援 支援 支援 支援 普通 支援 支援 團隊 14
metersphere 支援 類同 支援 支援 普通 支援 測試 17
rap 支援 支援 普通 簡單 支援 開發 12
easyapi 支援 類同 普通 簡單 開發 11

能否免費私有化部署是重要考量,直接給了5分。在此前提下,yapi和metersphere以17分并列第一。下面将着重介紹和比較這兩個平台。

五、yapi介紹

yapi提供了比較友善的安裝部署方法,但是在nodejs和npm版本選擇上,有坑。用最新版本竟然不支援。目前用的nodejs是v13.14.0,npm是v6.14.4,整個系統都點了一遍,tag這個小功能還是有點小問題,不過tag我們暫時也不用,沒影響。期待後續版本解決吧。

1、主界面,UI體驗不錯。

系統架構設計實戰:API管理平台選型

2、系統資訊,統計項夠用

系統架構設計實戰:API管理平台選型

3、項目首頁,包含接口清單、動态、資料管理、成員管理、設定、wiki。

系統架構設計實戰:API管理平台選型

4、接口能直接在web中調試,而且這個調試頁面的所有修改可以儲存,并同步更新接口和對應用例(僅路徑)

系統架構設計實戰:API管理平台選型

5、測試集合,這裡可以把指定接口或全部接口一鍵轉化成用例集。每個用例可以執行、克隆、斷言(僅自動化時生效)等。用例的編寫還是比較友善的。但是用例的管理上就比較弱了,隻支援一層目錄。不過項目的分的細一些,影響也不大。整體使用感覺,非常類似于postman,上手應該沒難度。

系統架構設計實戰:API管理平台選型

6、mock,針對每個接口可以設定mock,可以設定多個期望,也支援腳本。無論前端還是測試,應該都可以快速上手使用。

可惜的是,頁面上無法生成類似于mock_client之類的本地運作的mock檔案,後續我查查有沒有相關插件工具可以支援。

系統架構設計實戰:API管理平台選型

7、用例集裡面,直接點選開始測試,則頁面開始逐個執行用例。也支援”服務端測試“,就是在其它伺服器執行這些用例。具體操作方法大家可自行體會。

一次隻能執行一個用例集,不支援一次執行多個用例集。而且,沒有精美的測試報告。整體來說,接口測試相關功能,夠用的程度。後續查查有沒有相關插件工具,增強測試報告的能力。

系統架構設計實戰:API管理平台選型

8、導入導出,支援swagger、postman、json、HAR導入,其中postman格式非常可惜隻支援V1版本的,目前較新版本的postman都隻能導出V2和V2.1的json檔案了。

導出,支援html、MD、swaggerjson、json,相信夠用了。

系統架構設計實戰:API管理平台選型

六、MeterSphere介紹

MS的部署非常簡單,一個sh腳本,執行後就等着就行了。這點做的不錯。部署完後增加了msctl這個運維指令,可以非常友善的啟動、關閉、檢視整個MS系統。

1、主界面,顔值不錯。内容明顯多于yapi,而且明顯偏重于測試支撐。

系統架構設計實戰:API管理平台選型

2、接口測試這裡,包含首頁、接口定義、接口自動化、測試報告。其中接口定義,是用來導入和維護api文檔的,路徑有點深啊。

系統架構設計實戰:API管理平台選型

3、界面略顯淩亂,控件有點錯位,其它頁面也有類似的情況。應該是分辨率的問題,大一些分辨率應該就行了。

對接口的維護、調試、mock,都具備,操作項簡單明了。前端開發、後端開發用起來上手快。

不過也沒法生成類似于mock_client的本地執行檔案。也沒有插件支援。

系統架構設計實戰:API管理平台選型

4、每個api,都可以調試、mock、用例。而且Metersphere對用例的管理思路,跟yapi不一樣,它的每個用例都關聯到接口的,即每個接口下挂若幹個用例,然後所有用例可以自由歸屬集合和場景。對于測試工作的支撐非常強大。

還有單獨的用例子產品,可以清單,也可以系統内直接畫腦圖

系統架構設計實戰:API管理平台選型
系統架構設計實戰:API管理平台選型

5、接口自動化測試,以”場景“為基礎,除了最簡單的依次執行所有用例,也可以通過配置各種控制器,模拟業務流。功能強于postman的參數傳遞邏輯。

系統架構設計實戰:API管理平台選型

6、ms有簡單但夠用的測試報告

系統架構設計實戰:API管理平台選型

7、可選1個或幾個測試用例,直接轉到性能測試子產品。ms安裝的時候自帶了jmeter,隻要配置好資源池,這裡就自動調用jmeter進行壓力測試。

系統架構設計實戰:API管理平台選型
系統架構設計實戰:API管理平台選型

8、還能進行UI測試和UI自動化測試,但這個是企業版功能,免費版無法使用。且這個導航無法去掉。有點小别扭了。

系統架構設計實戰:API管理平台選型

七、總結

Yapi和MeterSphere兩者都是優秀的API管理平台,提供了強大的功能和良好的使用者體驗。初步看來,Yapi和MeterSphere的功能和性能似乎相差無幾。然而,當我們深入研究這兩個平台的商業化政策、團隊規模、可替代功能、學習和維護成本、未來替換公司自有平台難度、開發人員訪談和合規風險時,我們發現兩者的定位和複雜度是完全不同的。

對比項 yapi Metersphere
商業版本
免費版本 有,無限制 有,有限制
部署 無難度 無難度,且一鍵部署
資料導入 支援豐富 支援豐富
資料導出 支援豐富 隻有自有格式和swagger
開發用 完全夠用 完全夠用
自動生成文檔 支援,無侵入 不支援
前端用 夠用,簡單 夠用,簡單,但路徑有點深
測試用 夠用,簡單 非常強大,但有收費功能
項目管理 夠用,簡單 能支撐大項目,操作稍多
人員管理 扁平化 三級權限,劃分細緻
學習難度 簡單,基本顧名思義 普通,需要文檔支援
維護難度 簡單 簡單,但路徑有點深
報表統計 豐富
消息管理 豐富
流程覆寫 後端+前端+測試 後端+前端+測試,偏測試
擴充工具

在下面的内容中,我們将詳細分析每個次元的對比結果,以更好地了解這兩個平台的差異,并找出最适合我們團隊的API管理平台。

  1. 定位和複雜度: 初步看起來,Yapi和MeterSphere的功能似乎差不多,但如果細緻研究它們的商業化政策,會發現它們的定位和複雜度有着顯著的差異。Yapi注重API的管理和協作,它的使用者界面更加直覺,讓使用者能夠輕松地進行API管理。相比之下,MeterSphere則定位為一站式的企業級開放源代碼平台,它更注重測試生命周期的全面覆寫,其功能更為複雜和全面。
  2. 團隊規模: 根據目前團隊的規模,選擇更合适的工具是非常重要的。Yapi由于其簡潔和直覺的界面,對于小型團隊來說更容易接受和使用。而MeterSphere的功能覆寫度較廣,可能需要較大的團隊去進行管理和維護。
  3. 可替代功能和學習維護成本: Yapi的功能比MeterSphere來得簡單,學習和維護成本相對較低。然而,MeterSphere作為一站式解決方案,提供了更多的可替代功能,可能需要更多的時間去學習和維護。
  4. 未來替換公司自有平台難度: 若考慮到未來可能會替換公司現有的API管理平台,Yapi由于其簡潔的設計和較低的學習成本,将更容易為團隊接受。
  5. 開發人員訪談: 經過與多個業務部門開發人員和集團其他業務人員的訪談,我們發現大多數開發人員更傾向于使用Yapi,他們認為Yapi更易于使用和管理。
  6. 合規風險: Yapi是由國内團隊開發的國産軟體,采用Apache License 2.0,這是一種寬松且無傳染性的開源證書。許多國内大廠都在使用Yapi,而且我們也查閱了公司的技術貨架,發現Yapi被推薦使用。是以,Yapi無合規風險。

綜上所述,我們最終推薦使用Yapi作為我們中台組的API管理平台。此外,我們還了解到,集團的其他業務組也在使用Yapi。

注:經過安全漏洞掃描中,發現Yapi漏洞,可修複

具體修複方案如下:

  • 關閉使用者注冊功能:在"config.json"添加"closeRegister:true"配置項: { "port": "*****", "closeRegister":true } 修改完成後,重新開機 YApi 服務。
  • 暫時關閉 mock 功能:(需要修改 YApi 代碼); 在"config.json"中添加 "mock: false" ; 在"exts/yapi-plugin-andvanced-mock/server.js"中找到if (caseData && caseD ata.case_enable) {…},在其上方添加if(!yapi.WEBCONFIG.mock) {return false;}。
  • 檢查使用者清單,删除惡意不明使用者;如果發現存在不明使用者建立的接口及 mock 腳本請及時上報資訊安全管理部。

繼續閱讀