隨着互聯網的發展,API變的相當重要。根據統計,目前市面上有上千萬的開發者,互聯網項目超過10億,保守統計涉及的 API 數量大約有 100 億。這麼大基數的API,只要解決某些共有的痛點,將會是很是有意義的事情。咱們總結了API管理方面的問題,發現與API相關的文檔,調試,測試和數據Mock 在工做中效率是很是低下的。javascript
接口的維護管理很是耗時,大概佔用了30%開發時間。後端程序員要維護對於他們冗餘的文檔,前端程序員又由於後端開發提供的文檔不許確,致使浪費了大量的時間。前端
接口的正確性和穩定性很難保證,前端工程師爲了處理各類數據異常狀況,將會寫大量異常處理邏輯。傳統的接口自動化測試成本很是高,開發一個接口可能只須要一天,但寫接口測試用例,須要花費好幾天的時間。java
對於前端程序員,在後端功能沒有開發完成以前,他們須要接口返回數據 Mock ,以便不影響開發進度。傳統的數據 mock 是把模擬數據寫到項目代碼裏,這麼作會帶來更多新的問題,首前後端程序員定義的接口隨着需求、架構涉及隨時發生變化的,若是前端程序員徹底按照最初的設計定義mock數據,將會和實際作出來的接口有很大的出入。git
沒有一個標準化的流程統一處理,這個過程是很是分散的,須要配合很是多的工具,效率比較低。程序員
咱們指望有一個完整的接口工具,協助開發人員在簡單易用的GUI界面調試,管理文檔和測試接口。因而開始尋找市面上相似產品,通過一段時間的分析,最終咱們找到了幾個比較有表明性的產品 Rap,Nei,Easy-Mock。同時咱們按照本身的訴求列出了一些關鍵的特徵:github
Nei 是網易前端事業部的產品,在這些產品中算是作得比較好的, nei 專一作 saas 服務這塊,沒有開源版本。對於去哪兒內部,確定不會把公司機密的接口數據放到第三方平臺。後端
Rap 是阿里媽媽 MUX 團隊2013年出的一款產品,從時間上看是同類產品中最先的。Rap 是後端工程師基於 java 開發的,若是想定製部分功能,還須要學習 java,而咱們部門你們對 java 都不熟悉。另外一方面 Rap 沒有接口測試功能,然後端使用其餘工具(postman, restlet)測試接口,先後端開發人員沒有使用的統一工具。api
Easy-Mock 是大搜車無線團隊出的一款產品,Easy-Mock 定位是接口數據的模擬,解決前端依賴後端接口數據的問題,在同類產品中 mock 服務作得比較好。Easy-Mock 專一於前端數據的模擬,但沒法解決去哪兒現有的問題。bash
Rap 和 Easy-Mock 只是針對開發人員的單一工具,他們只關注了開發流程某一方面,並無站在全局的角度去解決問題,咱們的目標是整合接口開發過程當中的工具。因此咱們開始自主研發一個全新的接口管理平臺,咱們但願它可以提供接口文檔管理,接口數據模擬(Mock),接口調試,自動化測試等功能,讓先後端接口相關的工做進行的更加高效。這就是 YApi 接口管理平臺斐然由來。下面聊聊 YApi 是如何解決上述的痛點。服務器
在後端開發接口過程當中,開發和測試是必不可少的環節。以下圖所示,按以往的作法,接口文檔管理由於沒有跟開發和測試整合到一塊兒被孤立,致使後端維護對於他們冗雜繁瑣的文檔,是件收益很低的事情。沒有人喜歡作收益低的事情,只有提升了維護接口文檔的收益,才能真正解決這個問題。
在接口開發過程當中,後端一般都會使用 postman 等相似的工具測試接口,而測試接口是在開發過程當中一個必要的過程。若是參數有改動,必然會在 postman 等工具上更新字段和測試接口。由此能夠聯想到, 若是能有一款工具既可用來作測試接口,又能做爲接口文檔工具,將接口文檔和接口測試鏈接到一塊兒,不就解決了此問題。YApi 解決方案是將接口文檔和測試經過單一數據源鏈接到一塊兒,若是有改動,由於改的是單一的數據源,就不會出現更新滯後和不及時問題。
數據 Mock 服務在開發前期是比較棘手的問題。大多數狀況下,接口請求參數和返回數據都是後端規定的,在後端接口沒有完成以前,接口對於前端就是一個黑洞,可能最初對接口的定義跟實際後端作出的接口會有很是大的不一樣。這個時候就須要有一個工具,不只能模擬真實接口的狀況,還能關聯接口文檔,在後端開發過程當中,能夠隨時調整接口定義,並通知給前端開發者改動信息。
在 YApi 平臺,先後端只要維護接口定義的響應數據,就能夠生成須要的模擬數據,下面這段代碼定義了生成數據模板:
{
"errcode": 0,
"errmsg": "@string",
"data": {
"type":"@pick(1,2,3)",
"list|1-10": [{
"uid": "@id",
"username": "@name"
}]
}
}
複製代碼
可生成以下的模擬數據:
{
"errcode": 0,
"errmsg": "^*!SF)R",
"data": {
"type": 2,
"list": [
{
"uid": "370000200707276255",
"username": "Ruth Clark"
},
{
"uid": "650000200211185728",
"username": "Anthony Martin"
},
{
"uid": "370000199201143855",
"username": "Laura Rodriguez"
},
{
"uid": "610000198704072775",
"username": "Anthony Perez"
}
]
}
}
複製代碼
以往的數據 mock 方案不免會影響項目源碼,yapi 使用了服務器代理的方案,只須要在你的開發機作下服務器反向代理配置,不用修改項目一行源代碼,便可獲取到全部的 mock 數據。
基礎的 Mock 工具已經能知足大部分的需求了,但有些複雜場景是沒法實現的。例如:當我作一個數據列表頁面,須要測試某個字段在不一樣長度下以及數據爲空時頁面交互。YApi 提供了指望和自定義腳本的功能。
自定義腳本可根據請求的參數,cookie 信息,使用 javascript 腳本自定義返回的數據。咱們假設有個場景,我但願經過 cookie "_type" 控制列表頁面數據顯示,假設 _type 是 error,那麼列表顯示異常錯誤信息;假設 _type 是 empty ,列表顯示爲空。可以使用下面代碼實現:
if(cookie._type == 'error'){
mockJson.errcode = 400;
}
if(cookie._type == 'empty'){
mockJson.data.list = [];
}
複製代碼
接口開發完成後,後續的迭代是很是多的,每次對源碼的修改,都須要大量的測試才能確保接口是否正確。人工判斷確定是很差的,最好的辦法作成自動化測試,但自動化測試又是一件成本很是高的事情,須要後端人員和QA人員學習相關的框架,和寫大量的代碼。
YApi 的目標是經過簡單的 GUI 界面,就算不懂程序開發,只需配置相關的參數和斷言語句,就能實現自動化測試,很是的易用。除了基本的功能外,YApi 還提供了強大的 Pre-Script 和可視化表達式功能。
Pre-Script 包括請求參數處理腳本和響應數據處理腳本兩部分。經過自定義 javascript 腳本方式改變請求的參數和返回的 response 數據。他的使用場景以下:
可視化表達主要是爲了方便用戶生成自動化測試所用到的參數,經過一個樹形選擇性,快速引用所依賴的參數值。在全部的須要測試的接口配置完成後,點擊開始測試,就會按照指定的順序依次測試全部接口,測試完成後,可查看測試報告。
業務的需求是層出不窮的,YApi 做爲一個面向全國全部開發者的工具,不可能集成全部開發者須要的功能。咱們參考了極簡產品設計理念,保持內核的簡潔性,經過靈活強大的插件機制知足各種業務的需求。目前YApi的第三方登陸,swagger、postman 數據導入等功能都是基於插件機制實現。
YApi 在公司內部去年十月份上線後,不到一週時間,就有超過 700 個開發加入並使用 YApi 管理接口。目前公司內部已有將近300個項目使用 YApi 管理,平均天天的接口 mock 次數超過了5000+。本着開源精神,讓 YApi 提升更多開發者的效率,咱們的YApi 在 github 開源了,目前已有 1.6 k star,全國將近 500 家公司使用 YApi 管理他們的接口,包括一些你們耳熟能詳的公司,如百度,京東,連接,快手,藝龍,惟品會等等