YAPI-高效、易用、功能强大的 api 管理平台

2020-06-15 14:35:45 浏览数 (1)

接口管理平台不完善场景下的现状

在前后端分离的架构流行的时下,前后端部门之间交流更多的就是在数据处理和定义前端的接口,但是一边开发一遍维护接口文档,对于开发者来说是一个非常头疼的事情:

  1. 对于前端工程师,后端提供的接口文档,大多是不规范的,有使用 wiki 的,有 word 文档的,甚至还有用即时聊天软件沟通的,后端接口对于前端就像一个黑盒子,经常遇到问题是接口因未知原因增加参数了,参数名变了,参数被删除了。对于后端工程师,接口对接时总是需要写冗杂繁琐的文档,需要大量时间去维护接口文档。
  2. 前端开发的功能在后端功能还没完成前,因为前端的功能依赖于后端的数据,导致工作无法顺利展开。为了解决这个问题,有些前端工程师在代码注入 json,还有后端工程师临时搭建一套测试数据服务器,这种情况下势必会影响工作效率和代码质量,也不能及时进行字段的更新。
  3. 接口数据正确性无法得到保证。前端调用后端的接口数据渲染到 视图,数据一旦出错,将会导致视图和交互也出现问题,保证后端接口数据正确性变的愈来愈重要。接口自动化测试就是用来解决这个问题,但传统的接口测试框架使用成本很高,很多团队采用肉眼比对方式,效率很低。

在此诉求下,分析比对几个有代表性的大厂研发的产品,观看下表查看产品之间的区别:

Nei(网易前端事业部)

Rap(阿里MUX团队)

easy-mock(大搜车无线团队)

文档管理

Mock server

接口调试

自动化测试

插件机制

开源

部署难度

如果能把这几种产品的功能柔和在一起,就能够提供接口文档管理,接口数据模拟(Mock),接口调试,自动化测试等功能,让前后端接口相关的工作进行的更加高效。这也是YMFE团队研发出YApi 接口管理平台的初衷。

API接口管理平台的"后起之秀"

YApi 是高效易用功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。

特性
  • 基于 Json5 和 Mockjs 定义接口返回数据的结构和文档,效率提升多倍
  • 扁平化权限设计,即保证了大型企业级项目的管理,又保证了易用性
  • 类似 postman 的接口调试
  • 自动化测试, 支持对 Response 断言
  • MockServer 除支持普通的随机 mock 外,还增加了 Mock 期望功能,根据设置的请求过滤规则,返回期望数据
  • 支持 postman, har, swagger 数据导入
  • 免费开源,内网部署,信息再也不怕泄露了
安装

因为yapi依赖nodejs(7.6 )和mongodb(2.6 ),因此在准备部署的时候,我们需要为其提前准备好依赖环境。我们依旧将yapi部署在k8s环境上,但是对于API接口这种重要的数据,我们需要对yapi依赖的mongodb数据库进行数据的持久性存储,所以,首先我们需要添加一个pvc,即 yapi-volume.yml

代码语言:javascript复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: yapi-mongodb-pv
spec:
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  nfs:
    server: 192.168.10.231
    path: /data/k8s
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: yapi-mongodb-pvc
  namespace: kube-ops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 3G # 这里是开发环境,所以没有那么大的数据量

在集群中配置pv

代码语言:javascript复制
kubectl apply -f yapi-volume.yml

然后,我们需要定义Mongodb的容器和Yapi运行所需要的环境变量信息,在yapi的安装部署中,配置信息可以直接通过环境变量的方式直接配置在容器内,如下 yapi-mongodb-deployment.yml

代码语言:javascript复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: yapi
  namespace: kube-ops
spec:
  selector:
    matchLabels:
      app: yapi
  template:
    metadata:
      labels:
        app: yapi
    spec:
      containers:
        - name: yapi
          image: jayfong/yapi:latest
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: "128Mi"
              cpu: "500m"
          ports:
            - containerPort: 3000
              name: yapi
          env:
            - name: YAPI_ADMIN_ACCOUNT # yapi平台的管理员账号
              value: "marionxue@kubemaster.top"
            - name: YAPI_ADMIN_PASSWORD # yapi平台的管理员密码
              value: "yapiadmin"
            - name: YAPI_CLOSE_REGISTER # 关闭yapi平台的注册功能
              value: "true"
            - name: YAPI_DB_SERVERNAME # mongodb服务的主机
              value: "127.0.0.1"
            - name: YAPI_DB_PORT # mongodb服务的端口
              value: "27017"
            - name: YAPI_DB_DATABASE # mongodb中服务的数据库
              value: "yapi"
            - name: YAPI_MAIL_ENABLE
              value: "false"
            - name: YAPI_LDAP_LOGIN_ENABLE
              value: "false"
        - name: mongo
          image: mongo:latest
          ports:
            - containerPort: 27017
              name: mongodb
          volumeMounts:
            - mountPath: /data/db # mongodb容器内数据存储的位置
              subPath: yapimongo
              name: mongodata
      volumes:
        - name: mongodata
          persistentVolumeClaim:
            claimName: yapi-mongodb-pvc

通过这样的配置信息,yapi就能自动的初始化需要的数据库信息

代码语言:javascript复制
kubectl apply -f yapi-mongodb-deployment.yml
☸️  devcluster? kube-ops  ~  ? ? k get pods |grep api
yapi-556b69b85d-j7jfh       2/2     Running     0          17m
☸️  devcluster? kube-ops  ~  ? ? k logs -f yapi-556b69b85d-j7jfh -c yapi
启动引导服务...
写入配置...
{
  "adminAccount": "marionxue@kubemaster.top",
  "db": {
    "servername": "127.0.0.1",
    "port": 27017,
    "DATABASE": "yapi"
  },
  "mail": {
    "enable": false,
    "auth": {}
  },
  "ldapLogin": {
    "enable": false
  },
  "closeRegister": true,
  "plugins": [],
  "adminPassword": "yapiadmin",
  "port": 3000
}
等待 MongoDB 服务可用...
安装 YApi 插件...
尝试安装 YApi...
  node '--unhandled-rejections=strict' ./vendors/server/install.js

(node:417) Warning: Accessing non-existent property 'count' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)

(node:417) Warning: Accessing non-existent property 'findOne' of module exports inside circular dependency

(node:417) Warning: Accessing non-existent property 'remove' of module exports inside circular dependency
(node:417) Warning: Accessing non-existent property 'updateOne' of module exports inside circular dependency

log: mongodb load success...

初始化管理员账号成功,账号名:"marionxue@kubemaster.top",密码:"yapiadmin"

关闭引导服务...
尝试启动 YApi...
log: -------------------------------------swaggerSyncUtils constructor-----------------------------------------------
log: 服务已启动,请打开下面链接访问:
http://127.0.0.1:3000/

看到这样的日志,说明服务已经完全的运行起来了,但是我们无法在集群外部通过 http://127.0.0.1:3000/访问yapi服务,因此我们还需要对yapi配置一个service,然后通过traefik这个ingress暴露出来。

代码语言:javascript复制
apiVersion: v1
kind: Service
metadata:
  name: yapi
  namespace: kube-ops
spec:
  selector:
    app: yapi
  ports:
    - port: 3000
      targetPort: 3000
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: yapi-ingressroute
  namespace: kube-ops
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`yapi.kubemaster.top`)
      kind: Rule
      services:
        - name: yapi
          port: 3000

在配置好访问域名之后,我们就可以通过 yapi.kubemaster.top进行访问yapi服务:

代码语言:javascript复制
kubectl apply -f yapi-svc-ingress.yml
☸️  devcluster? kube-ops  ~  ? ? k get svc,ingressroute | egrep api
service/yapi       ClusterIP   10.98.130.119   <none>        3000/TCP             16m
ingressroute.traefik.containo.us/yapi-ingressroute       16m

然后,我们可以使用 yapi.kubemaster.top访问一下看看效果如何:

YAPI的基础功能效果图

好了,到这里基本上就可以尽情的体验Yapi了,对于开发和测试人员来说,完全是是一个释压的工具,所以赶紧动手体验一波吧!

0 人点赞