咱們爲何要作接口管理平臺 YApi

前言

隨着 Web 技術的發展,先後端分離構架變的愈來愈流行。先後端分離使後端專一於數據處理和定義前端所須要的接口,前端負責數據的展示和交互,大大細化了開發者的職責,提升了開發效率,但與此同時也帶來了一些問題:前端

  • 對於前端工程師,後端提供的接口文檔,大可能是不規範的,有使用 wiki 的,有 word 文檔的,甚至還有用即時聊天軟件溝通的,後端接口對於前端就像一個黑盒子,常常遇到問題是接口因未知緣由增長參數了,參數名變了,參數被刪除了。對於後端工程師,接口對接時老是須要寫冗雜繁瑣的文檔,須要大量時間去維護接口文檔。
  • 前端開發的功能在後端功能還沒完成前,由於前端的功能依賴於後端的數據,致使工做沒法順利展開。爲了解決這個問題,有些前端工程師在代碼注入 json,還有後端工程師臨時搭建一套測試數據服務器,這種狀況下勢必會影響工做效率和代碼質量,也不能及時進行字段的更新。
  • 接口數據正確性沒法獲得保證。前端調用後端的接口數據渲染到 視圖,數據一旦出錯,將會致使視圖和交互也出現問題,保證後端接口數據正確性變的越來越重要。接口自動化測試就是用來解決這個問題,但傳統的接口測試框架使用成本很高,不少團隊採用肉眼比對方式,效率很低。

相關產品調研

咱們迫切但願有一款產品可以知足咱們的訴求,因而開始尋找市面上相似產品,通過一段時間的分析,最終咱們找到了幾個比較有表明性的產品 Rap,Nei,Easy-Mock。同時咱們按照本身的訴求列出了一些關鍵的特徵:java

clipboard.png

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

YApi 解決方案

1. 共同維護一份接口定義,鏈接先後端

你們看下圖,在後端開發接口過程當中,接口開發和測試接口這是必不可少的環節,但文檔由於沒有跟接口開發和測試聯繫到一塊兒,被孤立。後端要維護對於他們冗雜繁瑣的文檔,是件收益很低的事情。沒有人喜歡作收益低的事情,因此最終的解決辦法就是要提升收益。下面詳細說明解決方案。後端

在接口開發過程當中,後端一般都會使用 postman 等相似的工具測試接口,而測試接口是在開發過程當中一個必要的過程。假如參數有改動,你們確定會在 postman 等工具上更新字段和測試接口。由此能夠聯想到,
若是能有一款工具既可用來作測試接口,又能做爲接口文檔工具,將接口文檔和接口測試鏈接到一塊兒,不就解決了此問題。YApi 解決方案是將接口文檔和測試經過單一數據源鏈接到一塊兒,若是有改動,由於改的是單一的數據源,就不會出現更新滯後和不及時問題。api

2. 前端 Mock Server 方案

數據 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 = [];
}

3.自動化測試

接口開發完成後,後續的迭代是很是多的,每次對源碼的修改,都須要大量的測試才能確保接口是否正確。人工判斷確定是很差的,最好的辦法是作成自動化,但自動化測試又是一件成本很是高的事情,須要後端人員和QA人員學習相關的框架,和寫大量的代碼。YApi 簡化了這一個過程,基於一個可視化界面,就算不懂程序開發,只需配置相關的參數和斷言語句,就能實現自動化測試,很是的易用。

除了基本的功能外,YApi 還提供了強大的 pre-script 和可視化表達式功能,pre-script 包括請求參數處理腳本和響應數據處理腳本兩部分。經過自定義 js 腳本方式改變請求的參數和返回的 response 數據。他的使用場景以下:

  • 接口請求參數須要加密及返回 response 解密
  • 接口請求參數須要添加計算 token

可視化表達主要是爲了方便用戶生成自動化測試所用到的參數,經過一個樹形選擇性,快速引用所依賴的參數值。
在全部的須要測試的接口配置完成後,點擊開始測試,就會按照指定的順序依次測試全部接口,測試完成後,可查看測試報告。

4.插件機制

YApi 最強大的一點莫過於他的插件機制,咱們去哪兒各個業務線有不一樣的需求,經過 YApi 預留的鉤子,開發不一樣的插件解決,好比咱們現有的 qsso 登陸,swagger 數據導入就是經過插件機制實現的,咱們團隊最近還在跟業務部門討論使用插件實現壓力測試功能等。總得來講,YApi基於插件機制,既知足了產品需求的多樣性,又保證了內核足夠易用和簡潔。

5. 開源和易部署

爲了幫助更多開發者和提高你們的工做效率,YApi 不只開源到 github,還提供了一個 cli 工具方便廣大開發者部署。使用 yapi-cli 提供的可視化部署方案,即使你不懂任何 nodejs、mongodb 的知識,也能輕鬆一鍵部署。

後記

YApi 已在去哪兒大面積使用,對 200+ 項目接口進行管理,每週有上萬次 mock 請求。在開源之後,愈來愈多的公司和團隊使用 YApi, github star 數已經上升到 1.1k了。YApi 在將來還將繼續專一於接口管理方面的功能,讓 YApi 成爲各位開發者的好幫手。

訪問地址

相關文章
相關標籤/搜索