首发于 语雀文档

背景是这样的

我们公司的后管项目走的不是 resful 风格的 api,而是走后管网关,后管网关会将请求进行分发,具体怎么分发,有这么以下几点:

  • 请求全部走 POST
  • 请求 URL 统一为 /agrs
  • 数据提交方式为 application/json
  • 数据格式大致分为:
    • 系统报文头

      • 服务名
      • 接口名
      • 接口版本号
      • 系统标识
    • 本地报文头
      • 用户信息
      • 分页信息
      • 设备信息
    • 报文体
      • 视具体情况而变化的动态数据
  • 文件传输走 OSS,不走表单文件流
  • ......

痛点

我们前端当然是不可能等后端开发完了才开始写代码的嘛,因此我们需要 mock,然而网关请求分发因为以上的诸多要求,使得 mock 开发十分不方便,有以下:

  1. 按传统方式创建 mock,那么请求 URL 开发的时候是一套,打包的时候又要全部改成 /agrs,这。。。

我希望的是开发时和打包时都是一样的,不需要改来改去两套标准

  1. 需要新 mock 时,按照 umi 的 mock 规范,需要在 mock 文件夹中创建一个 js 文件,并默认暴露一个对象,例如:

mock/getApps.js

export default {
"POST /getApps": {
sysHead: {},
localHead: {},
body: {},
}
}

需要多次写重复代码和重复数据结构(sysHead,localHead),而我只想关注 body 中的 mock 数据

我们的是 umi 工程,mock 这块详见 Mock 数据

  1. 按照第 2 点,当后端接口的服务名&接口名真正提供后,为了保持一致,我们除了要修改 mock 文件名,还需要修改 mock 文件中所暴露对象中的 URL 名称,麻烦。
  2. 要做到第 3 点,还得有个前提,就是 mock 文件名是与该 mock 所拦截的 URL 是一致的,不然那么多接口看都看不过来,找起来甚是痛苦眼瞎。
  3. 以 js 暴露模块的方式进行 mock,拦截同一 URL 的 mock 是可以被覆盖而不自知的,不清楚的人会出现明明 mock 的 URL 都正确但响应数据却对不上,这种一头雾水的情况
  4. ......

以上不方便,不是凭空想的,因为是付出了时间、人力,得出的确不方便这个结论的,光是以上第一点,就已经够受了。

解决

总体的思路就是:
只拦截 /agrs 这个 URL,使用 node.js 获取请求报文 request 中的参数服务名和接口名,按设计好的目录结构拼接路径,按路径读取文件并 JSON 格式化,最后返回。


对应以上痛点的解决措施:

  1. 开发时和打包时保持一致,都是用统一 URL:/agrs。
  2. 不使用 js 暴露模块的方式,直接使用 json 文件,其中放置重点关注的 json 格式 mock 数据,其他重复数据结构会在别处统一整合。
  3. 所设计的目录规范是:目录名称就是服务名,mock 文件名称就是接口名。(第 2 点已提及不需再定义和暴露,因此如果修改不必之前那么麻烦,只需要修改目录名称和文件名称即可)
  4. 在任何系统中,同一目录下是不能出现同名文件夹或同名文件的,按第 3 点的目录规范可解决重复覆盖问题,还能重复别人已有接口。

其他不多说了,直接上 github,也不是人人都会碰到这种情况,只是帮助内部前端小组提升开发体验的一个小工具库而已,也是作为一个前端小组长该做的事。

代码不复杂,自我感觉更重要的是,不论遇到大小问题,会去想怎么解决比较好,不断总结,不断积累吧。

Github

https://github.com/blueju/mock-request-distribute

mock 请求分发的更多相关文章

  1. tornado学习笔记18 _RequestDispatcher 请求分发器

    根据Application的配置,主要负责将客户端的请求分发到具体的RequestHandler.这个类实现了HTTPMessageDelegate接口. 18.1 构造函数 定义: def __in ...

  2. jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

    jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTran ...

  3. Magento请求分发与控制器

    Magento请求分发与控制器 Magento使用的是MVC结构,模型-试图-控制器结构,这样更好的实现显示逻辑和数据,业务逻辑的分离,更好的适合开发! 下面为传统的mvc结构 URL请求被一个PHP ...

  4. SpringMVC请求分发的简单实现

    简介     以前用了下SpringMVC感觉挺不错了,前段事件也简单了写了一些代码来实现了SpringMVC简单的请求分发功能,实现的主要思想如下: 将处理请求的类在系统启动的时候加载起来,相当于S ...

  5. Nginx将请求分发到各web应用

    介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 1.as ...

  6. 并发测试 java.lang.OutOfMemoryError: GC overhead limit exceeded Xms Xmx 阻塞请求 单节点 请求分发 负载均衡

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.se ...

  7. 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。

    本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并 ...

  8. Spring mvc 启动 和 请求分发

    Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ...

  9. 深入理解Magento – 第二章 – Magento请求分发与控制器

    深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第二章 – Magento请求分发与控制器 Model-View-Controller (MVC) ,模型-视图- ...

随机推荐

  1. Pyqt5使用

    一.帮助文档 二.PyQt5库结构 三. 面向对象的编程模式 class Windows(QWidget): def __init__(self): #继承父类的QWidget的方法 super(). ...

  2. MySQL 误删用户故障解决方案

    目录 "误删"所有用户 解决方式一: 停止数据库 跳过 授权表 和 网络启动(重要) 插入新的用户 重启启动数据库 解决方式二: 停止数据库 跳过 授权表 和 网络启动(重要) 授 ...

  3. 3.Work Queues

    标题 : 3.Work Queues 目录 : RabbitMQ 序号 : 3 var channel1 = _connection.CreateModel(); channel1.BasicQos( ...

  4. Python-collections模块之defaultdict

    defaultdict defaultdict 是 dict 类型的子类,正如其名,初始化时,可以给key指定默认值,什么意思呢?直接看代码.如果是普通的dict对象,访问一个不存在的key时,会报错 ...

  5. oslab oranges 一个操作系统的实现 实验二 认识保护模式

    https://github.com/yyu/osfs00 实验目的: 理解x86架构下的段式内存管理 掌握实模式和保护模式下段式寻址的组织方式. 关键数据结构.代码组织方式 掌握实模式与保护模式的切 ...

  6. filter_var 函数()绕过执行命令

    escape 过滤器来过滤link,而实际上这里的 escape 过滤器,是用PHP内置函数 htmlspecialchars 来实现的 htmlspecialchars 函数定义如下: htmlsp ...

  7. RT-Thread学习笔记2-互斥量与信号量

    目录 1. 临界区保护 1.1 方法一:关闭系统调度保护临界区 1.2 方法二:互斥特性保护临界区 2. 信号量 2.1 信号量的定义 2.2 信号量的操作 3. 生产者.消费者问题 4. 互斥量 4 ...

  8. 如何在 Apple Watch S6上离线播放音乐

    如何在 Apple Watch S6上离线播放音乐 Apple Watch 离线播放音乐 营销策略,捆绑销售 Apple Watch + AirPods + Apple Music Apple Wat ...

  9. js 深入原理讲解系列-currying function

    js 深入原理讲解系列-currying function 能看懂这一题你就掌握了 js 科里函数的核心原理 不要专业的术语,说人话,讲明白! Q: 实现 sum 函数使得以下表达式的值正确 cons ...

  10. PWA App All In One

    PWA App All In One PWA in Action PWA Weather App https://pwa.xgqfrms.xyz/pwa-app/public/index.html c ...