隨着 Web 技術的發展,先後端分離構架變的愈來愈流行。先後端分離使後端專一於數據處理和定義前端所須要的接口,前端負責數據的展示和交互,大大細化了開發者的職責,提升了開發效率,但與此同時也帶來了一些問題:前端
咱們迫切但願有一款產品可以知足咱們的訴求,因而開始尋找市面上相似產品,通過一段時間的分析,最終咱們找到了幾個比較有表明性的產品 Rap,Nei,Easy-Mock。同時咱們按照本身的訴求列出了一些關鍵的特徵:java
Nei 是網易前端事業部的產品,在這些產品中算是作得比較好的, nei 是專一作 saas 服務這塊,沒有開源版本。對於去哪兒內部,確定不會把公司機密的接口數據放到第三方平臺。node
Rap 是阿里媽媽 MUX 團隊2013年出的一款產品,從時間上看是同類產品中最先的。Rap 是後端工程師基於 java 開發的,若是想定製部分功能,還須要學習 java,而咱們部門你們對 java 都不熟悉。另外一方面 Rap 沒有接口測試功能,然後端使用其餘工具(postman, restlet)測試接口,將致使不能及時更新接口文檔。git
Easy-mock 是大搜車無線團隊出的一款產品,Easy-mock 定位是接口數據的模擬,解決前端依賴後端接口數據的問題,在同類產品中 mock 服務作得比較好。Easy-mock 專一於前端數據的模擬,但沒法解決去哪兒現有的問題。github
Nei,Rap 接口管理平臺共同存在的問題是不易維護接口返回數據。筆者曾跟一個使用過 Rap 的後端工程師聊過,他說每次定義後端接口返回數據字段,好幾個百個字段須要更新很長時間。Nei,Rap 是基於維護一個 json-schema 方式定義後端返回數據結構,咱們假設某個接口有100個字段,若是基於 json-shema 那麼就要維護差很少 600 多左右字段的更新。這麼大工做量的,極可能致使後端工程師根本沒有動力去維護。mongodb
比較遺憾的是,這幾款優秀的產品,都缺失了一些咱們在乎的關鍵特徵。咱們可能須要作比較大的改動纔可以基本知足本身的需求,這個工做量頗有可能會超太重新開發一次。因此咱們開始自主研發一個全新的接口管理平臺,咱們但願它可以提供接口文檔管理,接口數據模擬(Mock),接口調試,自動化測試等功能,讓先後端接口相關的工做進行的更加高效。這就是 YApi 接口管理平臺斐然由來,下面簡要聊聊 YApi 是如何實現上述這些特徵的。json
你們看下圖,在後端開發接口過程當中,接口開發和測試接口這是必不可少的環節,但文檔由於沒有跟接口開發和測試聯繫到一塊兒,被孤立。後端要維護對於他們冗雜繁瑣的文檔,是件收益很低的事情。沒有人喜歡作收益低的事情,因此最終的解決辦法就是要提升收益。下面詳細說明解決方案。後端
在接口開發過程當中,後端一般都會使用 postman 等相似的工具測試接口,而測試接口是在開發過程當中一個必要的過程。假如參數有改動,你們確定會在 postman 等工具上更新字段和測試接口。由此能夠聯想到,
若是能有一款工具既可用來作測試接口,又能做爲接口文檔工具,將接口文檔和接口測試鏈接到一塊兒,不就解決了此問題。YApi 解決方案是將接口文檔和測試經過單一數據源鏈接到一塊兒,若是有改動,由於改的是單一的數據源,就不會出現更新滯後和不及時問題。api
數據 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 工具已經能知足大部分的需求了,但有些複雜場景是沒法實現的。例如:當我作一個數據列表頁面,須要測試某個字段在各類長度下的 ui 表現,還有當數據爲空時的 ui 表現。YApi 提供了指望和自定義腳本的功能。
本文主要介紹自定義腳本功能,指望功能可參考 yapi 平臺文檔。
自定義腳本可根據請求的參數,cookie 信息,使用 js 腳本自定義返回的數據。咱們假設有個場景,我但願經過 cookie "_type" 控制列表頁面數據顯示,假設 _type 是 error,那麼列表顯示異常錯誤信息;假設 _type 是 empty ,列表顯示爲空。可以使用下面代碼實現:
if(cookie._type == 'error'){ mockJson.errcode = 400; } if(cookie._type == 'empty'){ mockJson.data.list = []; }
接口開發完成後,後續的迭代是很是多的,每次對源碼的修改,都須要大量的測試才能確保接口是否正確。人工判斷確定是很差的,最好的辦法是作成自動化,但自動化測試又是一件成本很是高的事情,須要後端人員和QA人員學習相關的框架,和寫大量的代碼。YApi 簡化了這一個過程,基於一個可視化界面,就算不懂程序開發,只需配置相關的參數和斷言語句,就能實現自動化測試,很是的易用。
除了基本的功能外,YApi 還提供了強大的 pre-script 和可視化表達式功能,pre-script 包括請求參數處理腳本和響應數據處理腳本兩部分。經過自定義 js 腳本方式改變請求的參數和返回的 response 數據。他的使用場景以下:
可視化表達主要是爲了方便用戶生成自動化測試所用到的參數,經過一個樹形選擇性,快速引用所依賴的參數值。
在全部的須要測試的接口配置完成後,點擊開始測試,就會按照指定的順序依次測試全部接口,測試完成後,可查看測試報告。
YApi 最強大的一點莫過於他的插件機制,咱們去哪兒各個業務線有不一樣的需求,經過 YApi 預留的鉤子,開發不一樣的插件解決,好比咱們現有的 qsso 登陸,swagger 數據導入就是經過插件機制實現的,咱們團隊最近還在跟業務部門討論使用插件實現壓力測試功能等。總得來講,YApi基於插件機制,既知足了產品需求的多樣性,又保證了內核足夠易用和簡潔。
爲了幫助更多開發者和提高你們的工做效率,YApi 不只開源到 github,還提供了一個 cli 工具方便廣大開發者部署。使用 yapi-cli 提供的可視化部署方案,即使你不懂任何 nodejs、mongodb 的知識,也能輕鬆一鍵部署。
YApi 已在去哪兒大面積使用,對 200+ 項目接口進行管理,每週有上萬次 mock 請求。在開源之後,愈來愈多的公司和團隊使用 YApi, github star 數已經上升到 1.1k了。YApi 在將來還將繼續專一於接口管理方面的功能,讓 YApi 成爲各位開發者的好幫手。