我们在日常开发时,为了实现前后端分离开发,会使用接口约定的形式实现前后端分离开发,因为如果不这么做,前端小伙伴的工作是无法顺利展开的。使用swagger是无法满足这种要求的,因此我们决定寻找一款接口管理工具。
从上图可以看出,前端的工作不仅仅是页面的绘制,更费时间的是页面交互逻辑的编写,若接口字段无法预先定义,则会直接影响前端也没交互的开发工作进展,这也是为什么联调时间远大于前端和后端的分离开发时间,因为将复杂度高的开发任务滞后了。
DOCLever是一款优秀的接口管理工具,包括多种形式的数据导入和接口MOCK数据。使用DOCLever的开发流程从原先等接口,变为了约定接口,并确定返回字段,使前后端工作并行开发,前端在开发页面的同时也能直接进行交互开发,对接时如果前后端完全按照DOCLever接口约束开发,是不存在大问题的,虽然多业务流转性的业务无法保证,但也极大提高了前后端的开发效率。
我们看到了引入了DOCLever后 在开发之前多了接口约定的环节。虽然看似多出了一个工作流程,但是该流程却能极大地缩短前后端对接时间。同时也能提高团队的凝聚力,有多少离职是因为前后端对字段的约束存在争议,从而导致冲突,而这种冲突完全是无意义的,工作还得做,有的人越做越不爽,最终导致离职。
针对新的工作方式,我们可以参考以下约定执行:
- 前后端阅读当前冲刺所要完成的功能的需求说明书和原型,确定前端需要什么字段,哪些字段用于交互,后端需要存储那些字段,并约定数据结构。(这个过程需要反复多次,使前端同学和后端同学养成提前设计的能力,而不是开发中设计,磨合几次之后该阶段消耗的时间会大幅缩短)。
- 接口约定:这个阶段是将上一阶段的成果转化为 格式化的数据,并编写接口类型和结构,前端负责编写mock规则。
- 前后端分离开发:前端根据约定的接口mock数据,后端根据接口进行业务开发。
- 联调:该阶段只需对接流程即可,保证数据能够正确入库,交互能够正常进行即可。
部署DOCLever
1. 安装mongodb数据库
这里我们直接使用docker-compose
进行数据库部署
yml
version: '1.0.0'
services:
mongodb-single:
container_name: mongodb-single
image: mongo:7.0-rc-jammy
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin
mongo-expose:
image: mongo-express
container_name: mongo-expose
restart: always
ports:
- 8001:8001
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=admin
- ME_CONFIG_MONGODB_SERVER=mongodb
networks:
default:
name: mongodb_network
2. 获取DOCLever
我们从github获取DOCLever最新源码
原仓库https://github.com/DOClever/DOClever
但是原仓库无法创建新用户,我对此进行了修复
在 routes/admin.js中修改如下行即可,该错误应该是开发者疏忽导致的
csharp
this.userCreate=async (req,res)=>{
try
{
- let obj=await (this.admin.userCreate());
+ let obj=await (this.admin.userCreate(req.clientParam));
if(obj)
{
util.ok(res,obj,"ok");
}
else
{
util.ok(res,"ok");
}
}
catch (err)
{
util.catch(res,err);
}
}
3. 配置
我们可以按照如下形式配置数据库,工作区和端口号
json
{
"db":"mongodb://admin:admin@localhost:27017",
"filePath":"~/doclever/",
"port":9988
}
4. 启动
这里我们使用pm2启动即可
,命令为pm2 start Server/bin/www
5. 登陆用户,账户密码为DOClever
5. 设置账户和密码
7.新建团队
建立团队后可以邀请团队成员进行合作开发
8. 进入团队后新建项目
9. 建立接口
10.mock规则
less
@date 针对String类型,生成当前日期
@num(min,max) 针对Number类型,生成min到max范围之间的数字,比如@num(1,100)
@in(val1,val2,...) 针对String,Number类型,生成括号内的某一个值,比如@in(get,post,put,delete)
@img(width,height) 针对String类型,生成一个图片地址,如果填写@img,那么图片默认就是600x400
@null 针对String,Number,Boolean,Mixed类型,生成null值
@arr 针对Mixed类型,生成一个数组,比如@arr([123,45])
@obj 针对Mixed类型,生成一个对象,比如@obj({"name":"aa"})
@count(min,max) 针对Array类型,确定生成数组的大小,比如@count(1,10)
@code 针对String,Number,Boolean,Mixed类型,会执行自定义的代码并返回结果,比如@code(body["aa"])这个就会返回body参数里key为aa的值,有以下几个内置对象:param,query,header,body,global(global里面还有以下几个成员:name,baseurl,path,method)
如果不是以@字符开头的话 就直接生成你输入的那个值,当类型不匹配的时候会尝试去做类型转换
11.调用mock数据
bash
http://localhost:9988/mock/6541dcb748cd9dc31731a681/screen/data
http://localhost:9988/mock/项目名/接口全路径