API集成管理平台YAPI的搭建和使用


前言

隨着API數量越來越多,wiki已經再也體現不出它的優勢了。冗長的文檔資料讓人難以維護,稍微一點小改動就需要對很多地方進行修改。以前見到過的解決方案是,使用Confluence來進行接口管理和測試。但最近一位前端大佬推薦了YAPI這套API集成管理平台,上手后發現還挺不錯的,不過也有一些不方便的地方,看完后可以根據需求選擇。

一、YAPI是什么

YAPI簡介

 

 

 

 

YAPI是去哪兒網團隊YMFE開發的一個開源項目,用於API開發,幫助開發者輕松創建、發布、維護 API,協議Apache 2.0,非常良心,先給出相關鏈接:

(1)去哪兒網:和攜程類似的訂票網站

(2)YAPI官網:YAPI的簡介

(3)YAPIgithub倉庫:YAPI的源碼

(4)YAPI使用文檔:YAPI安裝手冊、使用方法等

(5)官方交流QQ群:644642474(2018年11月18日有效)

官方的宣傳:

YAPI——高效、易用、功能強大的API管理平台,旨在為開發、產品、測試人員提供更優雅的接口管理服務。

YAPI功能特性

 

 

 

(1)強大的Mock數據功能:前端Mock數據的福音,和Mock.js類似的語法

(2)多人可視化接口管理:多人協作(有修改歷史記錄)、可視化接口管理(樹形結構、搜索等等)

(3)權限管理:成熟的權限管理配置

(4)兼容性:支持swagger、postman等經典接口管理工具的數據格式導入,支持markdown、json等數據格式輸出

(5)wiki:可以自動生成接口wiki

(6)自動化測試:其實這個功能不太好用,可以基於本地或者服務器來進行自動化測試,但目前發現只能是冒煙測試。

(7)插件機制:留有插件hook,可以二次開發

(8)支持docker部署、內網部署

二、YAPI普通方式部署和安裝

無論以哪種方式部署,都需要兩個基本的環境:nodejs7.6+、mongodb2.6+。通常來說apt-get下來的版本都不滿足要求,所以我們直接安裝二進制包(如果有時間可以自己make源碼)。

1、基礎環境搭建

首先得有下載和解壓工具:

1.apt-get install wget
2.apt-get install xz

nodejs官網找到二進制包的下載地址:

 

 

 

用wget下載到服務器,這里選擇最新穩定版10.13.0,執行解壓、安裝:

 1 # 下載
 2 wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz
 3 # 解壓
 4 xz -d node-v10.13.0-linux-x64.tar.xz
 5 tar -xvf node-v10.13.0-linux-x64.tar
 6 # 移動到合適地方
 7 mv node-v10.13.0-linux-x64 /usr/local/node-v10.13.0-linux-x64
 8 # 添加環境變量
 9 vi ~/.bashrc
10 export PATH=$PATH:/usr/local/node-v10.13.0-linux-x64/bin
11 source ~/.bashrc

 

測試一下:

1 node -v
2 v10.13.0

同樣的方法安裝mongodb:去mongodb官網,選擇合適的版本,windows會是msi,Linux是tgz(用剛才加環境變量的方式安裝),我們選擇debian 8,是deb文件:

 

 

 

用wget下載,用dpkg安裝:

1 wget https://repo.mongodb.org/apt/debian/dists/jessie/mongodb-org/4.0/main/binary-amd64/mongodb-org-server_4.0.4_amd64.deb
2 sudo dpkg -i mongodb-org-server_4.0.4_amd64.deb

 

但下載過於緩慢(5kb/s),所以可以使用阿里鏡像,選擇適合自己系統的,這里是debian 8 amd64:

  

1 wget http://mirrors.aliyun.com/mongodb/apt/debian/dists/jessie/mongodb-org/4.0/main/binary-amd64/mongodb-org-server_4.0.4_amd64.deb
2 dpkg -i mongodb-org-server_4.0.4_amd64.deb
3 wget http://mirrors.aliyun.com/mongodb/apt/debian/dists/jessie/mongodb-org/4.0/main/binary-amd64/mongodb-org-shell_4.0.4_amd64.deb
4 dpkg -i mongodb-org-shell_4.0.4_amd64.deb
5 wget http://mirrors.aliyun.com/mongodb/apt/debian/dists/jessie/mongodb-org/4.0/main/binary-amd64/mongodb-org-tools_4.0.4_amd64.deb
6 dpkg -i mongodb-org-tools_4.0.4_amd64.deb

 

順手裝了一個shell(如果不裝shell,只能啟動服務,不能使用mongo命令作為客戶端去連接mongodb服務器),再裝一個tools(包含mongodump等備份工具)只花了1.2秒。

啟動mongodb服務器:

service mongod start

 

用mongodb shell測試一下:

1 mongo
2  
3 MongoDB shell version v4.0.4
4 connecting to: mongodb://127.0.0.1:27017
5 Implicit session: session { "id" : UUID("2558d8c3-4873-4c39-8a77-3a5a41d067b5") }
6 MongoDB server version: 4.0.4
7 Welcome to the MongoDB shell.

 

mongodb默認是誰都可以進的(不像mysql有root用戶),所以我們需要給mongodb加一個賬戶(密碼請設置復雜點的):

 1 mongo
 2 # 創建數據庫,名字必須是yapi
 3 use yapi
 4 # 增加一個yapi管理員賬戶
 5 db.createUser({
 6 user: "yapidba",
 7 pwd: "123456",
 8 roles:[
 9 {
10 role:"readWrite",
11 db:"yapi"
12 }
13 ]
14 })
15 # 進入admin數據庫
16 use admin
17 # 增加一個mongodb超級管理員賬戶
18 db.createUser({
19 user: "mongoadmin",
20 pwd: "123456",
21 roles:[
22 {
23 role:"userAdminAnyDatabase",
24 db:"admin"
25 }
26 ]
27 })

 

CTRL+C退出mongo,開啟登錄驗證:

1 vi /etc/mongod.conf
2  
3 #security:
4 auth = true
5 重啟mongod服務:

 

1 #停止當前服務
2 service mongod stop
3 # 創建/data/db
4 mkdir /data
5 mkdir /data/db
6 # 手工后台啟動mongod
7 mongod --auth --fork --logpath=/var/log/mongodb/mongod.log
8 # 完整的語句是
9 mongod --auth --dbpath=[你的db數據文件存放路徑] --fork --logpath=[你的日志存放路徑]

 

注意,手工啟動的話只能殺進程來退出(你也可以自己編寫service腳本):

1 ps -aux|grep mongo
2 kill xxxxxx

2、安裝YAPI

根據YAPI文檔進行安裝,官方推薦方式是圖形界面方式:

1 npm install -g yapi-cli --registry https://registry.npm.taobao.org
2 yapi server

 

這里我們選擇命令行方式去安裝:

1 mkdir yapi
2 cd yapi
3 git clone https://github.com/YMFE/yapi.git vendors //或者下載 zip 包解壓到 vendors 目錄
4 cp vendors/config_example.json ./config.json //復制完成后請修改相關配置

 

然后修改這個config文件:

 1 {
 2 "port": "9233",
 3 "adminAccount": "yapiadmin@bewindoweb.com",
 4 "closeRegister":true,
 5 "db": {
 6 "servername": "127.0.0.1",
 7 "DATABASE": "yapi",
 8 "port": 27017,
 9 "user": "yapidba",
10 "pass": "123456",
11 "authSource": ""
12 },
13 "mail": {
14 "enable": false,
15 "host": "smtp.163.com",
16 "port": 465,
17 "from": "***@163.com",
18 "auth": {
19 "user": "***@163.com",
20 "pass": "*****"
21 }
22 },
23 "ldapLogin":{
24 "enable":true,
25 "server":"ldap://localhost:389",
26 "baseDn":"cn=Manager,dc=bewindoweb,dc=com",
27 "bindPassword":"123456",
28 "searchDn":"dc=bewindoweb,dc=com",
29 "searchStandard":"mail",
30 "emailPostfix":"@bewindoweb.com",
31 "emailKey":"mail",
32 "usernameKey":"description"
33 }
34 }

 

(1)adminAccount:和mongodb無關,是yapi登錄使用的賬號名,后綴必須是@,密碼默認ymfe.org

(2)closeRegister:禁止注冊

(3)user/pass:剛才mongodb設置的yapi的用戶名和密碼

(4)mail:暫時關閉,設置為false

(5)ldapLogin:增加ldap登錄方式,利用前面《openLDAP原理、安裝和使用》搭建的服務器來測試,我們把賬號稍微設置得更完整:

 

 

 

baseDn、bindPassword:用於搜索用戶賬號的系統賬號;

searchDn:搜索根目錄;

searchStandard:搜索條件;

emailPostfix:郵箱后綴;

emailKey:郵箱在LDAP賬號里面的屬性名稱;

usernameKey:用戶顯示名在LDAP賬號里面的屬性名稱

接着執行npm依賴安裝,會生成node_module目錄:

1 cd vendors
2 npm install --production --registry https://registry.npm.taobao.org

 

這一步很容易報錯,這是一個bug,如果報錯,請嘗試:

1 npm install --production --registry https://registry.npm.taobao.org --unsafe-perm=true --allow-root

 

npm依賴安裝安裝完成后執行yapi服務器安裝:

1 npm run install-server //安裝程序會初始化數據庫索引和管理員賬號,管理員賬號名可在 config.json 配置

 

這一步如果報錯說Error: 初始化管理員賬號 "yapiadmin" 失敗,則根據打印信息去找是否是mongodb設置問題、config.json設置問題,成功的顯示是這樣的:

 

 

 

完成之后啟動yapi:

  1. node server/app.js

 

 

 

然后輸入公網IP:9233就可以訪問啦,只要你的服務器開放了這個端口。

三、YAPI的使用方法

1、基本界面介紹

【首頁】

 

 

 

【登錄/注冊】

 

 

 

如果配置了不讓注冊,1.3.x版本是點擊注冊后彈框提示不讓注冊,1.4.x版本是直接不讓點擊。 

登錄有兩種方式,我們前面配置的ldap和普通的mongodb數據庫登錄。

我們嘗試一下LDAP:

 

 

 

登錄成功,然后查看一下個人信息:

 

 

 

是我們LDAP里面配置的字段,很棒。再嘗試普通登錄:

 

 

 

查看一下個人信息:

 

 

 

由於是管理員,增加了好多信息,並且普通登錄支持修改用戶名和密碼(因為mongodb是yapi在管理)。

【基本操作界面】

 

 

 

 【用戶管理界面】(只有管理員可以看見)

 

 

 

【系統信息界面】(只有管理員看得見)

 

 

 

2、基本使用

【權限】

角色分為超級管理員>組長>開發者>訪客。

目錄有分組>項目。

每個人都可以創建分組,但只有超級管理員可以刪除分組。

每個人都可以創建項目,但只有超級管理員和分組組長可以刪除項目。

每個人都可以創建私有分組和項目,擁有完全的管理權限。

更多的權限控制可自行探索

 

 

 

 

 

 

【接口編寫和測試】

接口支持很多功能:HTTP方法、HTTPS、標簽、狀態等等。

請求接口支持上傳文件、RAW、BODY(JSON)、query(get參數)、配置Header等,非常靈活。

 

 

 

嘗試運行(需要安裝插件+chrome):

 

 

 

測試一下,斷言返回HTTP CODE 200:

【自動wiki】

導出成wiki試試:

 

 

 

四、YAPI優缺點

優點

顏值高;安裝簡便;集成WIKI、接口編寫、接口自動化測試於一體,更新非常及時;支持權限管理;支持swagger等其他API管理工具的格式數據導入;支持LDAP、SSO、CAS等登錄方式;支持集群。

缺點

(1)接口返回值只能設置一個模板

有時候我們希望正確返回設置一個模板、錯誤返回設置一個模板,這是swagger可以做到的,而YAPI無法做到

(2)接口模板必須復制粘貼

不像swagger解耦合一樣,一處配置處處運行,例如配置“分頁模板”,然后每個分頁只需要引用一下就好了,修改起來只需要修改一次。而YAPI目前只有復制粘貼。

已經有人提issue了:

 

 

 

(3)測試功能太雞肋

只能做冒煙測試,給數據、返回期望數據。無法編寫測試邏輯(如果返回XX則跳到XX),無法返回多個值(如果200則XX,如果404則XX),也就無法編寫單元測試了。

五、其他

nginx代理配置

因為YAPI是基於websocket的,所以如果用了nginx反向代理轉發,可以這樣配置:

 1 server{
 2 listen 8081;
 3 server_name yapi.bewindoweb.com;
 4 location / {
 5 proxy_buffers 8 32k;
 6 proxy_buffer_size 64k;
 7 # websocket
 8 proxy_http_version 1.1;
 9 proxy_set_header Upgrade $http_upgrade;
10 proxy_set_header Connection "upgrade";
11  
12 client_max_body_size 500m;
13 proxy_pass http://localhost:9233;
14 }
15 }
16 然后執行:
17 
18 nginx -t -c [配置文件]
19 nginx -s reload
20 YAPI7天備份腳本
21 
22 #!/bin/sh
23 # args
24 basepath=$(cd `dirname $0`; pwd)
25 datapath=$basepath
26 olddatapath=$basepath'/backupdata7days'
27 mdpath="/usr/bin/mongodump"
28 databasename="yapi"
29 user="yapidba"
30 password="123456"
31 hostname="localhost"
32 port="27017"
33  
34 # move old data to olddatapath
35 if [ "`ls -A ${datapath}`" != "" ];then
36 mv ${datapath}'/'*${databasename}* ${olddatapath} 2>/dev/null
37 fi
38  
39 # gen new backup
40 now=$(date +"%Y-%m-%d")
41 file=${datapath}'/'${databasename}-$now
42 ${mdpath} -h${hostname}:${port} -u${user} -p${password} -d${databasename} -o${file}
43 #echo ${mdpath} -h${hostname}:${port} -u${user} -p${password} -d${databasename} -o${file}
44  
45 # clean up over 7 days
46 sevendays=$(date -d -7day +"%Y-%m-%d")
47 if [ -d ${olddatapath}'/'$databasename'-'$sevendays ];then
48 rm -rf ${olddatapath}'/'$databasename'-'$sevendays
49 fi
50 然后使用crontab每天周期運行這個腳本:
51 
52 crontab -e
53 0 2 * * * /home/yapi/backup/backup.sh

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM