API 接口管理平台 YAPI 的搭建

用户头像
Man
关注
发布于: 2020 年 07 月 16 日
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/configSELINUXenforcing改成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 



发布于: 2020 年 07 月 16 日 阅读数: 146
用户头像

Man

关注

尘世间一名迷途小码农 2020.06.24 加入

1、致力于成为一名DevOps Geek,热衷于用技术方式去解决问题,厌恶低效,热衷自动化和智能化,释放人的创造性。 2、CSDN博客:https://blog.csdn.net/justyman

评论

发布
暂无评论
API接口管理平台YAPI的搭建