问答 求教,接口 mock 平台原理

teessstttt · 2022年04月14日 · 最后由 王稀饭 回复于 2022年04月23日 · 6331 次阅读

公司有个 mock 平台,配置规则后,挂载服务上就可以对 thrift 接口进行 mock。
想知道原理,奈何找不到文档周围人也只是用,有没有这方面经验的大佬解答下其中原理呢?

共收到 7 条回复 时间 点赞
9楼 已删除

你可以认为 mock 就是 后台服务,里面挂载服务程序,不过挂的服务不做生产逻辑,做定制的 rule 逻辑或者转发给真实服务,在获得结果后再转回给请求者。
没啥神奇的魔术

7楼 已删除

不用知道原理,mock 框架很多,简单封装一下就是一个平台。
比如:
https://www.mock-server.com/mock_server/creating_expectations.html

https://www.apifox.cn/help/app/mock/mock-rules/ 扒拉个别的接口 mock 工具的文档说明来,你看看,应该有些能用的,基本都是要熟悉 mock.js 的语法

研究一下 https://github.com/macacajs/macaca-datahub 你就知道原理了,mock server 会在中间劫持 http 请求,之后转发给后端,或者自己返回 mock 数据。

针对客户端、服务端,两者正常收发请求的场景来解释,一个 mock 平台关键流程如下:

  1. 接受客户端的请求
  2. 按照不同协议解析请求内容(http、https、rpc……)
  3. 按照 mock 平台上配置好的规则,来决定如何应答客户端的请求
    • 可能是直接给客户端返回响应,这个响应是人工配置的规则组成的响应
    • 可能是将请求透传给服务端(你可以想象为,mock 平台假装成客户端来请求原本的服务端),获得服务端的响应,再按照人工配置的规则将响应的部分结构或者内容做调整,把这个经过处理的响应返回给客户端
  4. 结束流程

对于用户来说可以感知不到 mock 平台的存在,而在网络请求链路上来看,mock 平台就是一个代理角色,是一个中间人(了解一下中间人攻击概念)。mitmproxy是一个经常用来做 mock 平台的代理。

但实际工作中也不应该只把 mock 平台当成是一个代理,mock 平台是围绕代理这个基本要素来扩展各种外围功能,包括但不仅限于:

  • 拦截请求流量
    • 可实现流量录制与回放
    • 可实现流量实时扫描报警阻断,或转储流量待日后离线扫描或追溯
  • 篡改请求&响应
    • 实现接口 Fuzz 测试
    • 实现 mock 测试(map local、map remote)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册