随着 Web 技术的发展,先后端分离构架变的愈来愈流行。先后端分离使后端专一于数据处理和定义前端所须要的接口,前端负责数据的展示和交互,大大细化了开发者的职责,提升了开发效率,但与此同时也带来了一些问题:前端
咱们迫切但愿有一款产品可以知足咱们的诉求,因而开始寻找市面上相似产品,通过一段时间的分析,最终咱们找到了几个比较有表明性的产品 Rap,Nei,Easy-Mock。同时咱们按照本身的诉求列出了一些关键的特征:java
Nei 是网易前端事业部的产品,在这些产品中算是作得比较好的, nei 是专一作 saas 服务这块,没有开源版本。对于去哪儿内部,确定不会把公司机密的接口数据放到第三方平台。node
Rap 是阿里妈妈 MUX 团队2013年出的一款产品,从时间上看是同类产品中最先的。Rap 是后端工程师基于 java 开发的,若是想定制部分功能,还须要学习 java,而咱们部门你们对 java 都不熟悉。另外一方面 Rap 没有接口测试功能,然后端使用其余工具(postman, restlet)测试接口,将致使不能及时更新接口文档。git
Easy-mock 是大搜车无线团队出的一款产品,Easy-mock 定位是接口数据的模拟,解决前端依赖后端接口数据的问题,在同类产品中 mock 服务作得比较好。Easy-mock 专一于前端数据的模拟,但没法解决去哪儿现有的问题。github
Nei,Rap 接口管理平台共同存在的问题是不易维护接口返回数据。笔者曾跟一个使用过 Rap 的后端工程师聊过,他说每次定义后端接口返回数据字段,好几个百个字段须要更新很长时间。Nei,Rap 是基于维护一个 json-schema 方式定义后端返回数据结构,咱们假设某个接口有100个字段,若是基于 json-shema 那么就要维护差很少 600 多左右字段的更新。这么大工做量的,极可能致使后端工程师根本没有动力去维护。mongodb
比较遗憾的是,这几款优秀的产品,都缺失了一些咱们在乎的关键特征。咱们可能须要作比较大的改动才可以基本知足本身的需求,这个工做量颇有可能会超太重新开发一次。因此咱们开始自主研发一个全新的接口管理平台,咱们但愿它可以提供接口文档管理,接口数据模拟(Mock),接口调试,自动化测试等功能,让先后端接口相关的工做进行的更加高效。这就是 YApi 接口管理平台斐然由来,下面简要聊聊 YApi 是如何实现上述这些特征的。json
你们看下图,在后端开发接口过程当中,接口开发和测试接口这是必不可少的环节,但文档由于没有跟接口开发和测试联系到一块儿,被孤立。后端要维护对于他们冗杂繁琐的文档,是件收益很低的事情。没有人喜欢作收益低的事情,因此最终的解决办法就是要提升收益。下面详细说明解决方案。后端
在接口开发过程当中,后端一般都会使用 postman 等相似的工具测试接口,而测试接口是在开发过程当中一个必要的过程。假如参数有改动,你们确定会在 postman 等工具上更新字段和测试接口。由此能够联想到,
若是能有一款工具既可用来作测试接口,又能做为接口文档工具,将接口文档和接口测试链接到一块儿,不就解决了此问题。YApi 解决方案是将接口文档和测试经过单一数据源链接到一块儿,若是有改动,由于改的是单一的数据源,就不会出现更新滞后和不及时问题。api
数据 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 = []; }
接口开发完成后,后续的迭代是很是多的,每次对源码的修改,都须要大量的测试才能确保接口是否正确。人工判断确定是很差的,最好的办法是作成自动化,但自动化测试又是一件成本很是高的事情,须要后端人员和QA人员学习相关的框架,和写大量的代码。YApi 简化了这一个过程,基于一个可视化界面,就算不懂程序开发,只需配置相关的参数和断言语句,就能实现自动化测试,很是的易用。
除了基本的功能外,YApi 还提供了强大的 pre-script 和可视化表达式功能,pre-script 包括请求参数处理脚本和响应数据处理脚本两部分。经过自定义 js 脚本方式改变请求的参数和返回的 response 数据。他的使用场景以下:
可视化表达主要是为了方便用户生成自动化测试所用到的参数,经过一个树形选择性,快速引用所依赖的参数值。
在全部的须要测试的接口配置完成后,点击开始测试,就会按照指定的顺序依次测试全部接口,测试完成后,可查看测试报告。
YApi 最强大的一点莫过于他的插件机制,咱们去哪儿各个业务线有不一样的需求,经过 YApi 预留的钩子,开发不一样的插件解决,好比咱们现有的 qsso 登陆,swagger 数据导入就是经过插件机制实现的,咱们团队最近还在跟业务部门讨论使用插件实现压力测试功能等。总得来讲,YApi基于插件机制,既知足了产品需求的多样性,又保证了内核足够易用和简洁。
为了帮助更多开发者和提高你们的工做效率,YApi 不只开源到 github,还提供了一个 cli 工具方便广大开发者部署。使用 yapi-cli 提供的可视化部署方案,即使你不懂任何 nodejs、mongodb 的知识,也能轻松一键部署。
YApi 已在去哪儿大面积使用,对 200+ 项目接口进行管理,每周有上万次 mock 请求。在开源之后,愈来愈多的公司和团队使用 YApi, github star 数已经上升到 1.1k了。YApi 在将来还将继续专一于接口管理方面的功能,让 YApi 成为各位开发者的好帮手。