目前前后端分离已成为主流,前后端开发环境互相独立的情况下,如何提高前后端协作效率已然成为每个公司不得不考虑的问题。
以一个项目开发周期为例,在协作上一般需要面对以下几个问题:
我相信很多公司跟有赞一样,没有专门的API文档站点,也没有相应的工具,基本在一个通用的文档站点由工程师自己手动创建、维护接口文档。
有赞也同样使用这种方式去维护接口文档,但这种方式会带来一些比较明显的问题:
这些问题都会增加协作双方的沟通成本,进而影响项目整体进度。
前端同学对于接口数据 mock 应该是非常熟悉的,而且每个公司或多或少都会有自己的一些套路跟方案。
比如最开始,大家可能会使用在前端代码里面直接写死 mock 数据的方式。你可能会对下面这段代码比较熟悉:
import mockData from './mockdata.js'
// ajax(url).then(dosomething)
// 数据 mock
setTimeout(mockData => {
dosomething(mockData);
}, 1000);
通过这种方式,前端同学可以在开发阶段手动 mock 后端接口数据,从而实现并行开发。
但这种方式的缺点显而易见:
因为这些缺点和 nodejs 的崛起,前端同学自然会想到使用 node 做一套 mock 服务器。于是就有了下面这种方式:
// ajax(realUrl).then(dosomething)
ajax(mockUrl).then(dosomething)
这种方式解决了使用 setTimeout 模拟真实请求的问题并且极大的减少了 mock 功能对业务的侵入。而且因为 mock 数据在远程,前后端可同时修改,减少沟通成本。
但是这种方式还是无法解决问题 2
、3
、4
。
有赞就曾使用过这种方式的变体,我们依赖特定 ajax
库的全局钩子,解决了问题 2
、3
、4
。但却也带来了其他问题,比如对特定 ajax
库的强依赖。
我相信很多公司跟有赞一样,联调时间是在项目开始的时候开发预估的,开始联调的时候前端其实并不知道后端接口是否真的OK了,或者说至少能调通了。所以常常会碰到的问题是,后端同学告诉你可以联调后,你发现接口报的全是 404
或者 500
,最后一查是后端环境配置有问题。
其实有赞在之前也并没有找到一个比较好的方案,到现在也只能说还处于探索阶段。
通过比较科学的方式判断后端接口是否已经可被调用。
首先,后端同学在写文档这件事上,成本是否可以为零?
有赞目前在大力推进服务化,并且引入了 node
作为中间层。所以在有赞,前后端的边界变成了 browser + node
-> java 服务化接口
。
对于 java 同学来说,业界已经一些比较成熟的方案来生成接口文档,比如 swagger
、api blueprint
、swift
。
但这些方案要么需要 java 同学引入很多非项目的三方依赖,要么有它自己的一套接口定义方式从而增加 java 同学的工作量。
而且有些方案并不适用于目前越来越主流的 browser & node
-> 协议网关
-> java 服务化接口
这种前后端协作方式。
为了让 java 同学更方便的生成文档,我们为 java 同学提供了IDEA Intellij 插件
。
最终的效果是,java 同学能够一键生成、更新接口文档。
我们在远程部署了一个 java 解析服务器
,通过该解析服务,我们可以将 java
代码里的备注抽取出来生成接口字段注释。最终一个接口的返回值定义可能是这样的。
所以,如果 java 同学本身有比较好的写注释的习惯,那么对他来说生成一个合格的接口文档将是零成本的。
目前有赞完整的数据 mock 方案如图所示:
从客户端(pc / mobile)发起的请求在经过 ZanProxy
过滤后,将需要 mock 的接口打到 ZanApi
上,经过 ZanApi
返回 mock 数据。
由于 ZanApi 部署在远端,前后端可同时修改,所以本身天然没有这个问题。
并且在 ZanApi 系统上,你可以收到自己收藏的接口的 mock 数据变更通知,可以较快的感知 mock 数据的变更。
ZanApi 支持为同一个接口添加多份 mock 数据,请求在数据 mock 时,ZanApi 能通过请求参数,自动返回不同 mock 数据。
当 java 同学通过 Idea 插件
自动生成接口文档时,ZanApi 会通过解析服务获取接口的返回值定义并自动讲定义转化成 JSONSchema
格式。
当需要返回随机数据时,ZanApi 可以根据接口返回值的 JSONSchema
定义产生随机数进而返回给客户端。
在 ZanApi 上,你可以为每个接口创建不同环境下的测试用例
。在测试用例
的基础上,你可以以项目维度创建一个接口集合
。
当接口集合
创建完毕后,ZanApi 提供了 一键测试 功能。 一键测试功能会获取该接口集合
内所有的接口,并将这些接口中定义的测试用例
完整的跑一遍。如果其中某一个接口无法调通,那么 ZanApi 将提示你该接口测试失败。
甚至,ZanApi 允许你通过对比真实接口返回值和接口返回值定义(或者对比之前已存在的某个 mock 数据)来判断该接口是否符合预期。
比如,在接口的返回值定义中字段 count
是一个数字,但是 ZanApi 发现测试用例返回的真实数据中该字段是一个 string
,那么该测试用例也将不会通过。
UI如下:
在有赞技术开放日上介绍了 ZanApi 后发现大家对 ZanApi 还是有着比较大的兴趣。但是由于我们尚未有时间整理开源相关的事宜,并且确实 ZanApi 还有很多不成熟的地方啊,所以 ZanApi 开源在短期内应该没办法实现。
但我们一直有开源的计划,并为之努力着
欢迎关注我们的公众号
Original url: Access
Created at: 2019-09-26 18:24:16
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论