使用 YApi 管理 API 文档,测试, mock

news2024/10/8 19:55:09

随着互联网的发展,API变的至关重要。根据统计,目前市面上有上千万的开发者,互联网项目超过10亿,保守统计涉及的 API 数量大约有 100 亿。这么大基数的API,只要解决某些共有的痛点,将会是非常有意义的事情。我们总结了API管理方面的问题,发现与API相关的文档,调试,测试和数据Mock 在工作中效率是非常低下的。

业务痛点

 

接口的维护管理非常耗时,大概占用了30%开发时间。后端程序员要维护对于他们冗余的文档,前端程序员又因为后端开发提供的文档不准确,导致浪费了大量的时间。

接口的正确性和稳定性很难保证,前端工程师为了处理各种数据异常情况,将会写大量异常处理逻辑。传统的接口自动化测试成本非常高,开发一个接口可能只需要一天,但写接口测试用例,需要花费好几天的时间。

对于前端程序员,在后端功能没有开发完成之前,他们需要接口返回数据 Mock ,以便不影响开发进度。传统的数据 mock 是把模拟数据写到项目代码里,这么做会带来更多新的问题,首先后端程序员定义的接口随着需求、架构涉及随时发生变化的,如果前端程序员完全按照最初的设计定义mock数据,将会和实际做出来的接口有很大的出入。

没有一个标准化的流程统一处理,这个过程是非常分散的,需要配合非常多的工具,效率比较低。

市场产品调研

我们期望有一个完整的接口工具,协助开发人员在简单易用的GUI界面调试,管理文档和测试接口。于是开始寻找市面上类似产品,经过一段时间的分析,最终我们找到了几个比较有代表性的产品 Rap,Nei,Easy-Mock。同时我们按照自己的诉求列出了一些关键的特征:

 

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

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

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

Rap 和 Easy-Mock 只是针对开发人员的单一工具,他们只关注了开发流程某一方面,并没有站在全局的角度去解决问题,我们的目标是整合接口开发过程中的工具。所以我们开始自主研发一个全新的接口管理平台,我们希望它能够提供接口文档管理,接口数据模拟(Mock),接口调试,自动化测试等功能,让前后端接口相关的工作进行的更加高效。这就是 YApi 接口管理平台斐然由来。下面聊聊 YApi 是如何解决上述的痛点。

解决方案

  1. 共同维护一份接口定义,打通各个环节

 

在后端开发接口过程中,开发和测试是必不可少的环节。如下图所示,按以往的做法,接口文档管理因为没有跟开发和测试整合到一起被孤立,导致后端维护对于他们冗杂繁琐的文档,是件收益很低的事情。没有人喜欢做收益低的事情,只有提高了维护接口文档的收益,才能真正解决这个问题。

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

 

  1. 前端 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 工具已经能满足大部分的需求了,但有些复杂场景是无法实现的。例如:当我做一个数据列表页面,需要测试某个字段在不同长度下以及数据为空时页面交互。YApi 提供了期望和自定义脚本的功能。

自定义脚本

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

if(cookie._type == 'error'){
    mockJson.errcode = 400;
}

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

3.自动化测试

接口开发完成后,后续的迭代是非常多的,每次对源码的修改,都需要大量的测试才能确保接口是否正确。人工判断肯定是不好的,最好的办法做成自动化测试,但自动化测试又是一件成本非常高的事情,需要后端人员和QA人员学习相关的框架,和写大量的代码。

YApi 的目标是通过简单的 GUI 界面,就算不懂程序开发,只需配置相关的参数和断言语句,就能实现自动化测试,非常的易用。除了基本的功能外,YApi 还提供了强大的 Pre-Script 和可视化表达式功能。

Pre-Script

Pre-Script 包括请求参数处理脚本和响应数据处理脚本两部分。通过自定义 javascript 脚本方式改变请求的参数和返回的 response 数据。他的使用场景如下:

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

可视化表达式生成器

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

4.插件机制

业务的需求是层出不穷的,YApi 作为一个面向全国所有开发者的工具,不可能集成所有开发者需要的功能。我们参考了极简产品设计理念,保持内核的简洁性,通过灵活强大的插件机制满足各类业务的需求。目前YApi的第三方登录,swagger、postman 数据导入等功能都是基于插件机制实现。

成果

YApi 在公司内部去年十月份上线后,不到一周时间,就有超过 700 个开发加入并使用 YApi 管理接口。目前公司内部已有将近300个项目使用 YApi 管理,平均每天的接口 mock 次数超过了5000+。本着开源精神,让 YApi 提高更多开发者的效率,我们的YApi 在 github 开源了,目前已有 1.6 k star,全国将近 500 家公司使用 YApi 管理他们的接口,包括一些大家耳熟能详的公司,如百度,京东,链接,快手,艺龙,唯品会等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CISP好考吗?考试大纲有哪些,CISP通过率有多少?

CISP全称:注册信息安全专业人员,发证机构是:中国信息安全测评中心;面向的培训对象是:各信息系统管理、建设、运行维护、督查及从事信息化工作的相关人员; 国测中心对报考CISP也是有学历要求的:硕…

Fmoc-Ser(Ac4Manα1-2Ac3Manα)-OH,一种糖基化氨基酸,化合物CAS号1427205-92-2

Fmoc-Ser(Ac4Manα1-2Ac3Manα)-OH是一种化学品,CAS编号1427205-92-2,分子式C44H51NO22,分子量为945.88。它的纯度标准达到95%以上,供应包装规格有1克、5克和10克,也可进行定制,时间周期可与生产厂家沟通。…

Simulink尝试双脉冲实验验证MOSFET二极管反向恢复实验的特性(附仿真模型)

目录 前言 双脉冲实验 Simulink仿真对比 总结 前言 最近在做交错串联的图腾柱单相PFC的项目,基于模型的开发,想要在仿真上实现过零点尖峰电流产生并通过软启动进行抑制,把整个过程都通过仿真实现出来,在这个过程中尝试了Simul…

WPS:文件输出与输出格式PDF与图片。

WPS的文件输出格式有很多种 点击文件后会出现两种能输出的方式,如果是word则有三种: 图片与PDF word: 点击输出为PDF后会跳出一个对话框: 可以在右边选择输出的范围:第x页 到 第y页 在输出为PDF的右边有一个设置选项…

如何将测绘数据加载到三维地图中,解决海量测绘数据在线管理难题?

《四维轻云》是四川兴域技术团队基于浏览器打造的一款地理空间数据在线管理平台,可实现TB级大规模倾斜摄影三维模型、正射影像、激光点云、数字高程模型等数据在线发布、管理及分享,并支持私有化部署和高阶功能定制化开发,解决了海量测绘数据…

企业国际物流信息化解决方案_箱讯科技

随着全球化的加速和国际贸易的不断扩大,物流行业的重要性日益凸显。企业国际物流信息化解决方案成为了提高企业物流效率和降低成本的重要手段。本文将从信息化对物流行业的影响、企业国际物流信息化解决方案的构成和实施步骤三个方面进行探讨。 一、信息化对物流行业…

nodejs+vue+elementui校园车辆校车管理系统

开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 本界面为学生用车信息的添加界面 本界面是校园车辆的使用记录信息,包括校车的编号,校车的名称&#xff0…

指针 和 数组 习题总结

这里看着脑袋晕了可以休息一下的。 目录 1. 数组 1.1 一维数组: 1.2 字符数组 1.3 字符串 1.4 二维数组 2. 指针 开始之前我们简单复习一下数组与指针的相关知识 数组 - 能够存放一组相同类型的元素,数组的大小取决于数组的元素个数和元素类型 指…

人工智能-实验一

第一次实验 一.实验目的 掌握有信息搜索策略的算法思想能够编程实现搜索算法应用A*搜索算法求解罗马尼亚问题 二.算法原理 1.A*搜索的评估函数 ​ A算法是一种启发式算法。A*搜索对结点的评估包含两部分,一部分是到达此结点已经花费的代价,记为g(n)&…

笔记本电脑的BIOS是怎么保护安全的?

随着攻防技术的不断演进,像BIOS攻击、高级网络代码攻击等手段层出不穷,“受害者”也不仅限于企业级服务器、存储,很多魔爪也开始伸向了拥有商业机密数据的PC。 BIOS是Basic Input/Output System(基本输入/输出系统)的…

07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置

Web大前端时代之:HTML5CSS3入门系列:Web大前端时代之:HTML5CSS3入门系列 - 毒逆天 - 博客园 源码:https://github.com/dunitian/LoTHTML5/tree/master/LoTHTML5/4.HTML5定位 定位类型 IP 定位 优点 任何位置都可用 在服务器端…

获奖!!!元年科技荣获信创“大比武”云平台技术支撑赛道单项奖

2022年底,由北京航空航天大学、北京理工大学、中国电子工业标准化技术协会信息技术应用创新工作委员会(简称信创工委会)共同主办的2022信创“大比武”活动圆满落幕。大赛由云平台技术支撑、操作系统生态建设、通信业务运营技术等七大赛道构成…

仙境传说RO:添加NPC的定义以及逻辑

仙境传说RO:添加NPC的定义以及逻辑 大家好我是艾西,前面几篇文章中我有跟大家讲解怎么定义一个NPC或是创建一个NPC去实现某个功能等。那么npc的定义是什么呢?今天艾西就跟大家讲解下定义一个npc时每一个参数的作用以及去哪里找每个参数填的值…

Spring AOP 学习(动态代理、JdbcTemplate、Junit)

动态代理 Proxy jdk动态代理,面向接口 cglib 第三方动态代理,面向父类 jdk动态代理 public class Test1 {public static void main(String[] args) {Dinner dinnernew Person("张三");// 通过Porxy动态代理获得一个代理对象,在代理对象中…

公司测试岗来了个卷王之王,还是个00后,真让人崩溃····

现在的小年轻真的卷得过分了,真是完全不把自己当人啊 都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才…

京东业务系统数据库分库分表架构设计

有幸参与了整个技术方案实施落地,对架构设计及技术细节深入了解,欢迎大家讨论交流! 一元抢宝系统是京东虚拟新兴的一个业务系统,上线以来订单量一直持续增长。在距离618前两个月时,京东商城商品虚拟研发部对系统做了整…

SpringBoot:SpringBoot约定大于配置?②

前言: 这一句话,有些人看过就当看过了,对这句话的解读很多文章我是不满意的,里面蕴含的知识量和信息是极少人关注到的。 基于此,我讲两句。 一、领悟约定大于配置 字面意思:约定的东西要大于配置&a…

Linux中的yum

一、yum介绍 yum是一个基于RPM包(RPM是 Red-Hat Package Manager 红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系,解决了日常工作中的大量查找安装依赖包的时间。 二、yum仓库简介 先在yum服务器上创建yum repository(yum仓库),在仓库…

Ranger从入门到精通以及案例实操系列

1、Ranger概述 1.1、什么是Ranger Apache Ranger是一个Hadoop平台上的全方位数据安全管理框架,它可以为整个Hadoop生态系统提供全面的安全管理。 随着企业业务的拓展,企业可能在多用户环境中运行多个工作任务,这就需要一个可以对安全策略进…

Mysql数据库--实现主从复制搭建与同步

Mysql数据库--实现主从复制搭建与同步 🔻 一、mysql 同步复制有关概述⛳ 前言、何为主从复制⛳ 1.1 mysql支持的复制方式⛳ 1.2 mysql支持的复制类型1.2.1🍁异步复制1.2.2🍁同步复制1.2.3🍁半同步复制1.2.4🍁[图解]-异…