RAP2 詳細部署、操作指南
文章目錄
什麼是RAP2
RAP通過GUI工具幫助WEB工程師更高效的管理接口文檔,同時通過分析接口結構自動生成Mock數據、校驗真實接口的正確性,使接口文檔成爲開發流程中的強依賴。有了結構化的API數據,RAP可以做的更多,而我們可以避免更多重複勞動。
基於RAML的接口定義、文檔生成、Mock Server完成了定義和使用的分離,通過一套規範完成的接口定義,可以用不同的工具得到適應不同API管理系統的輸出,有更多的可能性,同時保持了核心定義不變。
RAP較之於RAML,前者更加集中,所有的定義、文檔、mock都在同一個服務中完成,並且實時生效,方便快捷,如果只考慮方便易用,RAP是更好的選擇,而RAML顯得更加繁瑣,更適合於公開的接口定義,方便在各個系統之間流轉。
項目地址
RAP地址:https://github.com/thx/rap ,但目前RAP2已經發布,RAP已經停止維護。
RAP2前後端分離,因此RAP2有兩個地址:後端https://github.com/thx/rap2-delos 前端http://github.com/thx/rap2-dolores
前後端部署指南
前後端部署在同一臺機器上,所需環境如下:
- Node.js 8.9.4+
- npm 6.9.0+
- MySQL 5.7+
- Redis 4.0+
已有系統環境:
- CentOS 7.2
- Git 1.8.3.1
後端
安裝node
假設nodejs已安裝,這裏nodejs安裝不做記錄,安裝參考:https://www.cnblogs.com/liangjiongyao/p/9120535.html
node和npm驗證:
> node -v
v8.11.3
> npm -v
6.9.0
如果node鏡像速度太慢,建議使用taobao的cnpm代替npm,使用方法:https://npm.taobao.org/
後面就可以直接使用cnpm xxx代替npm xxx,當然這兩個命令是等價的,只不過cnpm使用的是tabao鏡像源,速度更快。
安裝mysql
假設mysql已安裝好,或者使用已有的mysql服務,這裏使用已有的mysql服務。
安裝redis
假設redis已安裝好,或者使用已有的redis服務,這裏使用已有的redis服務。
下載源碼
git clone https://github.com/thx/rap2-delos.git
修改配置文件
進入目錄:rap2-delos/src/config
目錄文件如下:
├── config.dev.ts
├── config.local.ts
├── config.prod.ts
└── index.ts
修改三個config文件的mysql數據庫配置和redis配置:
serve: {
port: 8080,
},
...
db: {
dialect: 'mysql',
host: '192.168.20.61',
port: 3306,
username: 'root',
password: 'root',
database: 'RAP2_DELOS_APP',
pool: {
max: 5,
min: 0,
idle: 10000,
},
logging: false,
},
其他兩個配置文件也修改對應的db配置,redis配置只需修改prod,因爲安裝在本機,所以local和dev的redis配置可以不用修改。
端口默認是80,這裏修改爲8080。
之前嘗試過只修改prod配置,但是create-db好像不成功,爲保證100%成功,直接改三個文件。
其中prod的配置略有區別但道理都是一樣:
serve: {
port: (process.env.EXPOSE_PORT && parseInt(process.env.EXPOSE_PORT)) || 8080,
},
...
db: {
dialect: 'mysql',
host: process.env.MYSQL_URL || '192.168.20.61',
port: (process.env.MYSQL_PORT && parseInt(process.env.MYSQL_PORT)) || 3306,
username: process.env.MYSQL_USERNAME || 'root',
password: process.env.MYSQL_PASSWD || 'root',
database: process.env.MYSQL_SCHEMA || 'RAP2_DELOS_APP',
pool: {
max: 80,
min: 0,
idle: 20000,
acquire: 20000,
},
logging: false,
},
redis: {
host: process.env.REDIS_URL || 'localhost',
port: (process.env.REDIS_PORT && parseInt(process.env.REDIS_PORT)) || 6379
}
MySQL創建schema
在配置的mysql數據庫中創建rap2需要的schema:
CREATE DATABASE IF NOT EXISTS RAP2_DELOS_APP DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
編譯
# 切換到根目錄
cd ../..
# 安裝依賴包
npm install
# 安裝PM2
# 可能會出現什麼gcc版本過低等問題,出現後請自行升級
npm install -g pm2
# 安裝TypeScript編譯包
npm install -g typescript
# 編譯
# 修改了項目的代碼或配置文件之後一定重新編譯,不然修改不起作用
# 如果報錯說沒有權限創建文件夾,可以在後面加上--unsafe-perm參數
npm run build
初始化數據庫
# 初始化數據庫
# 確保數據庫可連,控制檯會打印初始化內容和進度
npm run create-db
# 檢查
npm run check
啓動後端
# 啓動
npm run start
# 控制檯輸出成功
檢查是否啓動成功
訪問服務器8080端口,出現如下信息表明啓動成功:
查看後端日誌
有時前端報錯,需要查看後端日誌,操作如下:
# 查詢pm2進程
pm2 ls
┌──────────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼───────────┼──────┼──────────┤
│ rap-server-delos │ 0 │ 1.0.0 │ fork │ 15499 │ online │ 0 │ 8h │ 0.2% │ 35.7 MB │ root │ disabled │
└──────────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴───────────┴──────┴──────────┘
# 拿到後端的pm2 id 爲0
# 查看實時日誌
pm2 logs 0
# 日誌將會以類似tail的方式打開,再次操作即可看見錯誤信息
前端
前端和後端啓動過程差不多:
# 獲取源代碼
git clone https://github.com/thx/rap2-dolores.git
# 修改配置文件
cd rap2-dolores/src/config
# 文件目錄如下
├── config.dev.js
├── config.prod.js
└── index.js
# 修改兩個配置文件的如下部分
serve: 'http://192.168.5.224:8080'
# 注意ip不能寫localhost,即使是在同一個機器上寫的前端和後端
# 回到根目錄
cd ../..
# 安裝依賴包
npm install
# 編譯
# 修改了項目的代碼或配置文件之後一定重新編譯,不然修改不起作用
# 如果報錯說沒有權限創建文件夾,可以在後面加上--unsafe-perm參數
npm run build
# 安裝serve
npm install -g serve
# 啓動
# 其中./build是編譯生成的文件路徑,8090是前端訪問的端口
serve -s ./build -p 8090
# 這裏啓動後會阻塞會話,可以使用nohup,並且指定全路徑啓動
nohup serve -s /root/rap/build -p 8090 &
訪問服務器8090端口:
RAP2操作指南
賬號系統
可直接申請賬號,申請賬號後可登陸。
權限系統
- 登陸後可查看所有公開倉庫(那些稀奇古怪的倉庫是初始化數據,到時可以用管理員賬戶刪除)
但僅僅有查看查庫列表的權限,如果需要查看倉庫內容的權限,請繼續往下看 - 登陸後可創建倉庫
- 自己創建的倉庫只能自己修改,可以編輯倉庫添加成員,加入的成員可以修改和添加接口
- 可以創建團隊,然後創建團隊的API倉庫,這樣團隊裏的人就都有權限修改API
API管理
api可以隨時創建、修改、刪除,並且保存後會mock接口會馬上生效。mock-server基於mockjs,接口的入參和出參都可以根據一些特殊規則來生成:
- 創建API
- 定義入參出參:
入參有parameter和body兩種方式,mock後,並不會檢查參數是否滿足生成規則,只會檢查必填參數是否填寫,生成規則適用於隨機生成一個參數用於測試API:
- 入參和出參規則
類型 生成規則 初始值 導入寫法 描述 舉例 string min-max 任意字符串 {"name|min-max": "xyz"} 名稱爲name的屬性,其值爲“xyz”字符串重複n次,min<=n<=max count 任意字符串 {"name|count": "xyz"} 名稱爲name的屬性,其值爲“xyz”重複count次 number +1 任意整數 {"name|+1": value} 作爲array屬性中某個object對象的屬性name,列表中對象的該屬性會從value開始自增 min-max 任意數字,可以是小數 {"name|min-max": 5} 名稱爲name的屬性,其值爲min-max的隨機整數 min-max.dmin-dmax 任意數字,可以是小數 {'name|min-max.dmin-dmax': 1.2} 名稱爲name的屬性,其值爲整數部分爲min-max,小數部分保留dmin-dmax位的小數 其中小數部分或整數部分可以固定 boolean 1 true/false {"name|1": true} 名稱爲name的屬性,其值爲true/false的概率都是1/2 min-max true/false {"name|min-max": value} 名稱爲name的屬性,其值爲 value 的概率是 min / (min + max) 值爲 !value 的概率是 max / (min + max) object count {"name|count": {"key": value}} 名稱爲name的屬性,其值爲對象中任取count個屬性組成的新對象 min-max {"name|min-max": {"key": value}} 名稱爲name的屬性,其值爲對象中任取min-max個屬性組成的新對象 array min-max {"name|min-max": [{"key": value}]} 名稱爲name的屬性,其值爲數組中對象重複min-max次 count {"name|count": [{"key": value}]} 名稱爲name的屬性,其值爲數組中對象重複count次 function 函數體 {"name": function(){}} 名稱爲name的屬性,其值爲執行函數 function返回值 函數的上下文爲屬性 'name' 所在的對象 regexp /regexp/ {"name": /regexp/} 名稱爲name的屬性,其值爲滿足regexp正則表達式的任意值 佔位符(string) @placeholder_name {"name": "@placeholder_name"} 名稱爲name的屬性,其值爲placeholder_name函數隨機生成的值生成 更多佔位符請參考mockjs文檔 http://mockjs.com/0.1/#Mock.Random
- 導入功能:
導入時,屬性值不能爲null,否則點擊提交API會卡住,查看後臺日誌已報錯,所有屬性都不支持null值,即使導入成功,提交編輯的時候也會卡住(F12查看network已經失敗,頁面不會有明顯提示)