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
版权声明: 本文为 InfoQ 作者【Man】的原创文章。
原文链接:【http://xie.infoq.cn/article/de45dddbf844966bc4a8e7505】。文章转载请联系作者。
评论