API 接口管理平台 YAPI 的搭建
一、前言
上一篇文章我们聊到API接口设计最佳实践,后面给自己挖了个坑(也算是自我激励吧)。为什么这里要调研 YAPI 呢?原因也很简单:
-
所负责开发团队目前做 API 接口测试的工具真的是八仙过海,有用 SWAGGER2、Postman、Jmeter 的,还有“原生”手工自己写测试类的;
-
在 2019 年的生产故障复盘中发现,有 40%左右的故障都是跟接口有关的,如上下游联调时接口版本不一致的;
-
目前正在团队实践的 DevOps 流水线目前在 Jenkins 构建环节是没有所谓的质量管控的,例如没有在流水线上没做代码静态扫描(如安全)、没有做接口测试。
为了解决上述问题,如我之前所说的,怎么让 API 接口文档活起来,而不是“束之高阁”?怎么让 API 接口文档能够及时更新?怎么让 API 接口得到有效的管理,就好像 gitlab 之于源代码呢?那就是要使用 API 接口管理平台。
YAPI 的安装攻略网上一大堆,本着纸上得来终觉浅,绝知此事要躬行的精神,也方便后续自己查阅,这里就重复一遍,一步一步的记录下整个安装过程。
二、YAPI 简介
YAPI 由去哪儿的移动架构组 YMFE 开源的一套 API 接口管理工具,它有以下几个优点:
1、权限管理 :YAPI 成熟的团队管理扁平化项目权限配置满足各类企业的需求
2、可视化接口管理:基于 websocket 的多人协作接口编辑功能和类 postman 测试工具,让多人协作成倍提升开发效率
3、易用的 Mock Server,mock 数据生成比较方便,解决了项目前期模拟测试数据,方便调试;
4、数据迁移:支持 swagger, postman 等接口数据导入,方便接口工具迁移。
以上的是网上摘来的一些优点,我们后续持续去验证一下。
三、YAPI 安装
要安装 YAPI,需要一些前置条件,即需要安装 git、nodejs(7.6+)、mongodb(2.6+)。好,接下来我们一步步进行安装。
1、nodejs 的安装:
#获取资源
[root@centos7a justyman]# curl -sL https://rpm.nodesource.com/setup_8.x | bash -
#安装nodejs
[root@centos7a justyman]# yum install -y nodejs
查看nodejs和npm版本
[root@centos7a ~]# node -v
v8.17.0
[root@centos7a ~]# npm -v
6.13.4
2、安装 git:
安装git
[root@centos7a ~]# yum install -y git
Installed:
git.x8664 0:1.8.3.1-21.el77
Dependency Installed:
perl-Error.noarch 1:0.17020-2.el7 perl-Git.noarch 0:1.8.3.1-21.el77 perl-TermReadKey.x8664 0:2.30-20.el7
Complete!
3、安装 mongodb
#首先配置mongodb的yum源
[root@centos7a yum.repos.d]# touch /etc/yum.repos.d/mongodb-org.repo
[root@centos7a yum.repos.d]# vi /etc/yum.repos.d/mongodb-org.repo
#这里以4.2为例,一般mongodb奇数版本为开发版本,偶数版本的维护周期相对较长
[mongodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.2/x86_64/
gpgcheck=0
enabled=1
#安装mongodb
[root@centos7a /]# yum install -y mongodb-org
Installed:
mongodb-org.x86_64 0:4.2.6-1.el7
Dependency Installed:
mongodb-org-mongos.x8664 0:4.2.6-1.el7 mongodb-org-server.x8664 0:4.2.6-1.el7 mongodb-org-shell.x8664 0:4.2.6-1.el7 mongodb-org-tools.x8664 0:4.2.6-1.el7
Complete!
#验证mongodb是否安装成功
[root@centos7a /]# rpm -qa |grep mongodb
mongodb-org-mongos-4.2.6-1.el7.x86_64
mongodb-org-4.2.6-1.el7.x86_64
mongodb-org-shell-4.2.6-1.el7.x86_64
mongodb-org-tools-4.2.6-1.el7.x86_64
mongodb-org-server-4.2.6-1.el7.x86_64
4、启动 mongodb
因为网上提到了在 CentOS 下 SELinux 会阻止 mongodb 的启动,需要先设置禁用。主要是把/etc/selinux/config 的 SELINUX 从 enforcing 改成 disabled,然后重启操作系统。
接着,启动 mongodb。
#启动mongodb,一般不会有echo,需要自己查启动状态
[root@centos7a ~]# systemctl start mongod
#检查mongodb的启动状态
[root@centos7a ~]# netstat -ntlup|grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 1263/mongod
5、安装 YAPI
当上面的前置条件都已经准备好了,我们现在就开始安装 YAPI。
[root@centos7a justyman]# npm install -g yapi-cli --registry https://registry.npm.taobao.org
/usr/bin/yapi-cli -> /usr/lib/node_modules/yapi-cli/bin/yapi-cli
/usr/bin/yapi -> /usr/lib/node_modules/yapi-cli/bin/yapi-cli
yapi-cli@1.5.0
added 266 packages from 125 contributors in 25.406s
[root@centos7a justyman]# yapi server
在浏览器打开 http://0.0.0.0:9090 访问。非本地服务器,请将 0.0.0.0 替换成指定的域名或ip
就这样,YAPI 就安装好了,直接访问http://xx.xx.xx.xx:9090,GG 了。
6、开防火墙
当时 telnet 那个 9090 端口发现不通就怀疑是防火墙没放开,果不其然。
[root@centos7a ~]# firewall-cmd --query-port=9090/tcp
no
[root@centos7a ~]# firewall-cmd --zone=public --add-port=9090/tcp --permanent
success
[root@centos7a ~]# firewall-cmd --reload
success
[root@centos7a ~]# firewall-cmd --query-port=9090/tcp
yes
重新访问,就可以看到以下安装页面,继续下一步。
如果你想用于邮件通知的,可以通过修改文件的配置:vi /root/yapi/config.json
最后,开通 3000 端口防火墙及启动 YAPI 服务。
[root@centos7a ~]# firewall-cmd --zone=public --add-port=3000/tcp --permanent
success
[root@centos7a ~]# firewall-cmd --reload
success
[root@centos7a yapi]# node vendors/server/app.js
log: ------------------swaggerSyncUtils constructor--------------------
log: 服务已启动,请打开下面链接访问:
http://127.0.0.1:3000/
log: mongodb load success...
打开浏览器就可以访问到 YAPI 的首页。
四、YAPI 守护线程的安装
NodeJS 的“单线程”是很脆弱的,只要线程里面有个不可预料的错误就会导致整个 NodeJs 服务挂掉,虽然你可以加 handler 或者 try/catch 来避免,但是其底层会不会什么问题也不好说啊,所以这个是治标不治本啊。因此,类似 pm2、forever、Supervisor 的线程守护服务就出来了,它的作用就是当 NodeJS 服务挂掉后马上自动重启,说白了就是一个 babysitter。
官方推荐 pm2。pm2 是虾米?具体可以访问官网https://pm2.io/docs/plus/overview/,它也有一个可视化的一个监控界面,贼好用。
pm2 是守护 nodejs 进程后台运行的,异常停止后可以自动重启,
也可以袒护其它第三方的命令行程序,比如 php 的命令行
这里,我就直接使用 pm2 作为守护线程服务了。
[root@centos7a ~]# npm install pm2 -g
/usr/bin/pm2-dev -> /usr/lib/node_modules/pm2/bin/pm2-dev
/usr/bin/pm2-docker -> /usr/lib/node_modules/pm2/bin/pm2-docker
/usr/bin/pm2 -> /usr/lib/node_modules/pm2/bin/pm2
/usr/bin/pm2-runtime -> /usr/lib/node_modules/pm2/bin/pm2-runtime
#后续使用pm2线程守护方式关闭和重启YAPI,这样pm2就能够守护yapi了。
[root@centos7a ~]# pm2 stop /root/yapi/vendors/server/app.js
[root@centos7a ~]# pm2 start /root/yapi/vendors/server/app.js
另外,附上在网上查到的 pm2 常规命令:
pm2 start xxx -i 4 #后台运行pm2,启动4个app.js
#也可以把’max’ 参数传递给 start
#正确的进程数目依赖于Cpu的核心数目
pm2 start xxx --name my-api # 命名进程
pm2 list #显示所有进程状态
pm2 monit #监视所有进程
pm2 logs #显示所有进程日志
pm2 stop all #停止所有进程
pm2 restart all #重启所有进程
pm2 reload all #0秒停机重载进程 (用于 NETWORKED 进程)
pm2 stop xxx #停止指定的进程
pm2 restart xxx : #重启指定的进程
pm2 startup #产生 init 脚本 保持进程活着
pm2 web #运行健壮的 computer API endpoint
pm2 delete xxx #杀死指定的进程
pm2 delete all #杀死全部进程
五、总结:
如何启动 YAPI
1、启动 mongod 服务:systemctl start mongd。当然,你可以把 mongod 设置成开机自启动(这个不是本文重点,网上一搜一大把教程)。
2、使用 pm2 方式启动 yapi:pm2 start /root/yapi/vendors/server/app.js。(这里/root/yapi/是示例中 yapi 的安装路径)
如何使用 YAPI
今天时间差不多,后面试用后补充,先留个随意门在这里。
六、参考
demo 站点:yapi.demo.qunar.com (不过现在 demo 访问不了,或者自己直接搭一个玩玩吧,程序猿嘛,要的就是动手能力)
全球最大基友聚集地:github.com/ymfe/yapi