关于mock server

这篇技术博客是在知乎上看到的 知乎js大神张云龙写的 这里贴过来记录下,若是侵权 请告知将及时删除。php

---------------------------前端

为了更好的分工合做,让前端能在不依赖后端环境的状况下进行开发,其中一种手段就是为前端开发者提供一个web容器,这个本地环境就是 mock server。

要完整运行前端代码,一般并不须要完整的后端环境,咱们只要在mock server中实现如下几点就好了:java

  1. 能渲染模板
  2. 实现请求路由映射
  3. 数据接口代理到生产或者测试环境

能渲染模板很简单,在mock server中集成模板引擎就好了,而后提供模拟的页面数据用于完整渲染页面,不过有时候生产环境中的模板引擎可能有一些环境依赖的扩展,这个要单独实现。

请求路由映射,实现原理就是要让本地的mock server有一个router,能接收全部HTTP请求,而后在router中根据线上的路由约定,实现一套同样的规则,这个也不难,不赘述了。

最后数据接口代理。与前端相关的HTTP请求一共就3种响应状况:python

  1. 渲染页面的请求;
  2. 静态资源的请求;
  3. 获取数据的请求。

因为实现了router,咱们把渲染页面的请求在mock server中处理掉,直接输出本地模板的渲染结果;静态资源的请求直接返回文件内容;而把数据请求代理到测试或者生产环境,本地就不用mock了(固然,若是出现新的接口测试环境没有的,能够追加router,在mock server想响应假数据)

至于题主说的url一致性问题,其实不存在的。你的这个 http://www.foo.com/bar 的数据请求,在js中应该这样写:

web

$.get('/bar', callback) 


这种写法,省略了host,在线下开发时,其最终结果是请求 ,而因为咱们在mock server中实现了路由规则,这个请求实际上被代理到了测试/生产环境去获取数据。而当你把代码部署到线上时,其访问真实请求地址又自动变成了你指望的 http://www.foo.bar,正常运行。json

补充一些Tips:后端

  • 因为Mock Server须要具有渲染模板的能力,所以可能须要一种轻量的服务端跨平台server实现方案,若是是java的后端,能够考虑使用jetty,一个1.8M的jar便可;若是是php的后端,能够考虑使用php 5.4之后内置的server,启动命令是 php -S 127.0.0.1:3000 router.php;若是是Nodejs,那就很简单了,估计都不须要Mock Server,本地也能够跑的
  • 当代理数据接口的生产/测试环境不具有新接口的时候,Mock Server要在本地制造假数据响应请求,可使用  这类在线的JSON数据生成工具,很是方便。
不少前端工程师觉得前端分离的惟一途径是接入NodeJS做为UI层,其实不是的,还有一种方案就是这种Mock Server,前端工程师直接写后端模板,效果有时候甚至更好,并且对已有先后端架构的改动成本最小。


====== 更新 ======

经常使用脚本语言下开启简易web server的方法,能够用于实现Mock Server:ruby

    • ruby -run -e httpd . -p 9090前端工程师

    • python -m SimpleHTTPServer 8000架构

    • php -S 127.0.0.1:8088 router.php

相关文章
相关标签/搜索