首发于 语雀文档
背景是这样的
咱们公司的后管我的项目走的不是 resful 格调的 api,而是走后管网关,后管网关会将申请进行散发,具体怎么散发,有这么以下几点:
- 申请全副走 POST
- 申请 URL 对立为 /agrs
- 数据提交形式为 application/json
-
数据格式大抵分为:
-
零碎报文头
- 服务名
- 接口名
- 接口版本号
- 零碎标识
-
本地报文头
- 用户信息
- 分页信息
- 设施信息
-
报文体
- 视具体情况而变动的动态数据
-
- 文件传输走 OSS,不走表单文件流
- ……
痛点
咱们前端当然是不可能等后端开发完了才开始写代码的嘛,因而咱们须要 mock,然而网关申请散发因为以上的诸多要求,使得 mock 开发非常不不便,有以下:
- 按传统形式创立 mock,那么申请 URL 开发的时候是一套,打包的时候又要全副改成 /agrs,这。。。
我心愿的是开发时和打包时都是一样的,不须要改来改去两套规范
- 须要新 mock 时,依照 umi 的 mock 标准,须要在 mock 文件夹中创立一个 js 文件,并默认裸露一个对象,例如:
mock/getApps.js
export default {
"POST /getApps": {sysHead: {},
localHead: {},
body: {},}
}
须要屡次写反复代码和反复数据结构(sysHead,localHead),而我只想关注 body 中的 mock 数据
咱们的是 umi 工程,mock 这块详见 Mock 数据
- 依照第 2 点,当后端接口的服务名 & 接口名真正提供后,为了保持一致,咱们除了要批改 mock 文件名,还须要批改 mock 文件中所裸露对象中的 URL 名称,麻烦。
- 要做到第 3 点,还得有个前提,就是 mock 文件名是与该 mock 所拦挡的 URL 是统一的,不然那么多接口看都看不过去,找起来甚是苦楚眼瞎。
- 以 js 裸露模块的形式进行 mock,拦挡同一 URL 的 mock 是能够被笼罩而不自知的,不分明的人会呈现明明 mock 的 URL 都正确但响应数据却对不上,这种一头雾水的状况
- ……
以上不不便,不是凭空想的,因为是付出了工夫、人力,得出确实不不便这个论断的,光是以上第一点,就曾经够受了。
解决
总体的思路就是:
只拦挡 /agrs 这个 URL,应用 node.js 获取申请报文 request 中的参数服务名和接口名,按设计好的目录构造拼接门路,按门路读取文件并 JSON 格式化,最初返回。
对应以上痛点的解决措施:
- 开发时和打包时保持一致,都是用对立 URL:/agrs。
- 不应用 js 裸露模块的形式,间接应用 json 文件,其中搁置重点关注的 json 格局 mock 数据,其余反复数据结构会在别处对立整合。
- 所设计的目录标准是:目录名称就是服务名,mock 文件名称就是接口名。(第 2 点已提及不需再定义和裸露,因而如果批改不用之前那么麻烦,只须要批改目录名称和文件名称即可)
- 在任何零碎中,同一目录下是不能呈现同名文件夹或同名文件的,按第 3 点的目录标准可解决反复笼罩问题,还能反复他人已有接口。
其余不多说了,间接上 github,也不是人人都会碰到这种状况,只是帮忙外部前端小组晋升开发体验的一个小工具库而已,也是作为一个前端小组长该做的事。
代码不简单,自我感觉更重要的是,不管遇到大小问题,会去想怎么解决比拟好,一直总结,一直积攒吧。
Github
https://github.com/blueju/mock-request-distribute