API 接口管理平台 YAPI 的搭建

发布时间 2023-12-19 20:17:21作者: Bear-Run

一、前言

 

上一篇文章我们聊到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