前言

随着 Web 技术的发展,前后端分离构架变的越来越流行。前后端分离使后端专注于数据处理和定义前端所需要的接口,前端负责数据的展现和交互,大大细化了开发者的职责,提高了开发效率,但与此同时也带来了一些问题:

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

相关产品调研

我们迫切希望有一款产品能够满足我们的诉求,于是开始寻找市面上类似产品,经过一段时间的分析,最终我们找到了几个比较有代表性的产品 Rap,Nei,Easy-Mock。同时我们按照自己的诉求列出了一些关键的特征:

Nei 是网易前端事业部的产品,在这些产品中算是做得比较好的, nei 是专注做 saas 服务这块,没有开源版本。对于去哪儿内部,肯定不会把公司机密的接口数据放到第三方平台。

Rap 是阿里妈妈 MUX 团队2013年出的一款产品,从时间上看是同类产品中最早的。Rap 是后端工程师基于 java 开发的,如果想定制部分功能,还需要学习 java,而我们部门大家对 java 都不熟悉。另一方面 Rap 没有接口测试功能,而后端使用其他工具(postman, restlet)测试接口,将导致不能及时更新接口文档。

Easy-mock 是大搜车无线团队出的一款产品,Easy-mock 定位是接口数据的模拟,解决前端依赖后端接口数据的问题,在同类产品中 mock 服务做得比较好。Easy-mock 专注于前端数据的模拟,但无法解决去哪儿现有的问题。

Nei,Rap 接口管理平台共同存在的问题是不易维护接口返回数据。笔者曾跟一个使用过 Rap 的后端工程师聊过,他说每次定义后端接口返回数据字段,好几个百个字段需要更新很长时间。Nei,Rap 是基于维护一个 json-schema 方式定义后端返回数据结构,我们假设某个接口有100个字段,如果基于 json-shema 那么就要维护差不多 600 多左右字段的更新。这么大工作量的,很可能导致后端工程师根本没有动力去维护。

比较遗憾的是,这几款优秀的产品,都缺失了一些我们在意的关键特征。我们可能需要做比较大的改动才能够基本满足自己的需求,这个工作量很有可能会超过重新开发一次。所以我们开始自主研发一个全新的接口管理平台,我们希望它能够提供接口文档管理,接口数据模拟(Mock),接口调试,自动化测试等功能,让前后端接口相关的工作进行的更加高效。这就是 YApi 接口管理平台斐然由来,下面简要聊聊 YApi 是如何实现上述这些特征的。

YApi 解决方案

1. 共同维护一份接口定义,连接前后端

大家看下图,在后端开发接口过程中,接口开发和测试接口这是必不可少的环节,但文档因为没有跟接口开发和测试联系到一起,被孤立。后端要维护对于他们冗杂繁琐的文档,是件收益很低的事情。没有人喜欢做收益低的事情,所以最终的解决办法就是要提高收益。下面详细说明解决方案。

在接口开发过程中,后端通常都会使用 postman 等类似的工具测试接口,而测试接口是在开发过程中一个必要的过程。假如参数有改动,大家肯定会在 postman 等工具上更新字段和测试接口。由此可以联想到,
如果能有一款工具既可用来做测试接口,又能作为接口文档工具,将接口文档和接口测试连接到一起,不就解决了此问题。YApi 解决方案是将接口文档和测试通过单一数据源连接到一起,如果有改动,因为改的是单一的数据源,就不会出现更新滞后和不及时问题。

2. 前端 Mock Server 方案

数据 Mock 服务在开发前期是非常头疼的一个问题。大多数情况下,接口请求参数和返回数据都是后端规定的,在后端接口没有完成之前,接口对于前端就是一个黑洞,可能最初对接口的定义跟实际后端做出的接口会有非常大的不同。这个时候就需要有一个工具,不仅能模拟真实接口的情况,还能关联接口文档,在后端开发过程中,可以随时调整接口定义,并通知给前端开发者改动信息。

在 YApi 平台,前后端只要维护接口定义的响应数据,就可以生成需要的模拟数据,下面这段代码定义了生成数据模板:

{"errcode": 0,"errmsg": "@string","data": {"type":"@pick(1,2,3)","list|1-10": [{"uid": "@id","username": "@name"}]}
}

可生成如下的模拟数据:

{"errcode": 0,"errmsg": "^*!SF)R","data": {"type": 2,"list": [{"uid": "370000200707276255","username": "Ruth Clark"},{"uid": "650000200211185728","username": "Anthony Martin"},{"uid": "370000199201143855","username": "Laura Rodriguez"},{"uid": "610000198704072775","username": "Anthony Perez"}]}
}

以往的数据 mock 方案难免会影响项目源码,yapi 使用了服务器代理的方案,只需要在你的开发机做下服务器反向代理配置,不用修改项目一行源代码,即可获取到所有的 mock 数据。

基础的 Mock 工具已经能满足大部分的需求了,但有些复杂场景是无法实现的。例如:当我做一个数据列表页面,需要测试某个字段在各种长度下的 ui 表现,还有当数据为空时的 ui 表现。YApi 提供了期望和自定义脚本的功能。
本文主要介绍自定义脚本功能,期望功能可参考 yapi 平台文档。

自定义脚本可根据请求的参数,cookie 信息,使用 js 脚本自定义返回的数据。我们假设有个场景,我希望通过 cookie "_type" 控制列表页面数据显示,假设 _type 是 error,那么列表显示异常错误信息;假设 _type 是 empty ,列表显示为空。可使用下面代码实现:

if(cookie._type == 'error'){mockJson.errcode = 400;
}if(cookie._type == 'empty'){mockJson.data.list = [];
}

3.自动化测试

接口开发完成后,后续的迭代是非常多的,每次对源码的修改,都需要大量的测试才能确保接口是否正确。人工判断肯定是不好的,最好的办法是做成自动化,但自动化测试又是一件成本非常高的事情,需要后端人员和QA人员学习相关的框架,和写大量的代码。YApi 简化了这一个过程,基于一个可视化界面,就算不懂程序开发,只需配置相关的参数和断言语句,就能实现自动化测试,非常的易用。

除了基本的功能外,YApi 还提供了强大的 pre-script 和可视化表达式功能,pre-script 包括请求参数处理脚本和响应数据处理脚本两部分。通过自定义 js 脚本方式改变请求的参数和返回的 response 数据。他的使用场景如下:

  • 接口请求参数需要加密及返回 response 解密
  • 接口请求参数需要添加计算 token

可视化表达主要是为了方便用户生成自动化测试所用到的参数,通过一个树形选择性,快速引用所依赖的参数值。
在所有的需要测试的接口配置完成后,点击开始测试,就会按照指定的顺序依次测试所有接口,测试完成后,可查看测试报告。

4.插件机制

YApi 最强大的一点莫过于他的插件机制,我们去哪儿各个业务线有不同的需求,通过 YApi 预留的钩子,开发不同的插件解决,比如我们现有的 qsso 登录,swagger 数据导入就是通过插件机制实现的,我们团队最近还在跟业务部门讨论使用插件实现压力测试功能等。总得来说,YApi基于插件机制,既满足了产品需求的多样性,又保证了内核足够易用和简洁。

5. 开源和易部署

为了帮助更多开发者和提升大家的工作效率,YApi 不仅开源到 github,还提供了一个 cli 工具方便广大开发者部署。使用 yapi-cli 提供的可视化部署方案,即便你不懂任何 nodejs、mongodb 的知识,也能轻松一键部署。

后记

YApi 已在去哪儿大面积使用,对 200+ 项目接口进行管理,每周有上万次 mock 请求。在开源以后,越来越多的公司和团队使用 YApi, github star 数已经上升到 1.1k了。YApi 在未来还将继续专注于接口管理方面的功能,让 YApi 成为各位开发者的好帮手。

访问地址

  • demo 站点:yapi.demo.qunar.com
  • github: github.com/ymfe/yapi

我们为什么要做接口管理平台 YApi相关推荐

  1. 可视化接口管理平台 YApi,让你轻松搞定 API 的管理问题

    随着开发的推进,各种各样的文档会接踵而来,比如:需求文档.架构文档.接口文档等等,我们通过 SVN.Git 等可以很方便的管理,面对需求的不断变化,我们需要不断的对各类文档进行维护.但在开发阶段,针对 ...

  2. 推荐的接口管理平台-yapi

    最近在找好用的接口管理平台,为项目的接口做统一管理.最终选择了 YApi 这个开源项目. github地址:https://github.com/ymfe/yapi: 项目需要nodejs,mongo ...

  3. 接口管理平台YApi

    介绍 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验,开发 ...

  4. Yapi 可视化接口管理平台部署文档

    一[yabi介绍] 1.1 官网 github:https://github.com/ymfe/yapi Yapi 可视化接口管理平台 Yapi 是高效.易用.功能强大的 api 管理平台,旨在为开发 ...

  5. BAT都在使用的开源接口管理平台,你用了吗?

    作者:Anoyi 原文:https://www.jianshu.com/p/a97d2efb23c5 介绍 给大家推荐一个开源接口管理平台YApi,众多互联网大厂都在使用 YApi 的一些客户:百度, ...

  6. 六大接口管理平台,总有一款适合你的!

    前后端分离绕不开的接口测试 先聊一聊前端和后端分离的优点.前后端分离优点如下: 真正的实现前后端解耦,前端服务器使用 nginx: 易于发现bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象: ...

  7. 开源项目 ——API接口管理平台数据库原型设计(三)

    开源项目 --API接口管理平台数据库原型设计(三) 背景 日常我们开发人员在开发一些常用的平台时都会用到各种各样的接口,而对于这些接口的有效管理都会成为我们的一些麻烦事,一些常见的接口管理平台我们使 ...

  8. Springboot集成springFox-Swagger3并通过Yapi做接口管理

    添加Swagger2依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfo ...

  9. yapi 插件_强大的开源API接口可视化管理平台——YAPI

    背景 在之前有些时日,曾经写过一个API管理平台--DOClever,但是总觉得界面上稍微差了点,刚好之前有朋友在评论区留言,让我知道了今天要介绍的这个平台YAPI,YApi 是一个可本地部署的.打通 ...

  10. yapi 权限_win10 x64下从0开始搭建YApi可视化接口管理平台

    YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只 ...

最新文章

  1. C/C++ mysql 设置字符集
  2. 联想继续为其硬件产品完善Linux支持
  3. 番茄日志发布1.0.3版本-增加Kafka支持
  4. sublime怎么运行go_使用SublimeGDB调试Go程序
  5. Qt——P11 自定义的信号和槽发生重载的解决
  6. 2016年中国OTT盒子行业市场现状及发展前景分析
  7. Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
  8. 计算机软件著作权查询网址
  9. 英文标题中哪些词不用大写
  10. ​分享 17 款你可能会用的上 Chrome 插件
  11. 浅谈全概率公式和贝叶斯公式
  12. html5卡片平行视差效果,HTML5/jQuery很棒的交互式平行视差皓月当空场景动画
  13. html日历页面节假日_js css+html实现简单的日历
  14. 认准了,就去做;不跟风,不动摇
  15. 使用Vmware workstation出现权限不足
  16. Aurora8B10B IP使用 -01- 简介与端口描述
  17. solidworks怎么画螺纹
  18. 激辩产业热点 | 6位大咖如何看待中国氢能和燃料电池前路?
  19. 基于51单片机的DS18B20温度显示
  20. deepstream源码

热门文章

  1. 安装操作系统找不到任何驱动器的解决方法
  2. 电信专业人才选拔条件
  3. 路飞学城Python-Day5
  4. ANSYS APDL学习(5):ANSYS输入文件input file 的编写和调试方法
  5. CAD图纸被设置成只读格式,如何取消?
  6. excel同一单元格怎么换行_自动换行还是强制换行?还有一键批量换行等着你
  7. aamp;m大学计算机科学,斑马博士捷报|德克萨斯AM大学 (TAMU) MSc Computer Science录取!...
  8. medsem-中介效应:基于结构方程模型SEM的中介效应分析
  9. 怎样开始买基金---我的基金购买体验[转]
  10. 【程序员如何买基金 八】筛选优秀的债券基金