iOS Local Mock

Mock数据是分离前后端开发的关键链路。通过预先跟服务端约定好的接口,模拟请求数据甚至逻辑,能够让前端开发独立自主,不会被服务端的开发所阻塞。

日常开发痛点:很多时候前端/服务端是并行开发,约定好的接口是无法在开发时提供,这个时候由于前端的开发依赖服务端的接口数据,所以无法单个模块整体的开发,只能先实现UI,以及部分逻辑,而且还是无法调试的。只能等待服务端开发完成才能进行接口、逻辑调试。

Mock就是用来解藕开发阶段的前端和服务端,让前端独立开发。

Local Mock方案

Charles+Express 的方式来实现Local Mock。
前提条件是已经定义好接口文档。

1、工具

Express:是基于Node.js平台,快速、开放、极简的Web开发框架。
Charles:Mac端的网络抓包工具。主要使用其重定向Map功能。

2、思路

  • 通过Express搭建本地服务,来模拟服务端数据请求,返回定义好的接口数据。
  • 通过Charles将真实的服务端接口地址(当前开发中还无法使用的新接口)重定向到Express建立的本地服务。
  • 客户端发请求,获取到自己手动创建的接口数据并进行调试。

实践

Express

1、搭建工程

  • 要求安装Node.js环境
$ mkdir myapp                          // 创建项目
$ cd myapp                             // 进入项目
$ npm init                             // 初始化项目
$ entry point: (index.js)              // 指定入口文件(默认index.js,可修改)
$ npm install express --save           // 安装express

2、编写项目

  • 新建入口文件index.js(默认不会创建,需要手动创建)
const express = require('express')
const app = express()
// Get请求,send()返回响应数据
app.get('/', function (req, res) {
    res.send("Hello World!")
});
// 监听端口
app.listen(3000, function () {
    console.log('Example app is running on port 3000!')
});
$ node index.js    //启动服务

浏览器访问 http://localhost:3000 就能请求到"Hello World!"
一个微服务就搭建完成,然后就是创建需要Mock的请求,返回按规范编写好的响应数据。

const fs = require('fs')  // 文件系统

// app.use()表示全局使用
app.use(function (req, res, next) {
    res.header('Content-Type', 'application/json');
    next();
});

// get
app.get('/detail', function (req, res) {
    // get 请求参数在  req.query
    console.log(req.query)
    var data = fs.readFileSync('./resources/detail.json')
    var result = JSON.parse(data)
    res.send(result)
});

// post
const bodyParser = require('body-parser')
//返回的对象是一个键值对,当extended为false的时候,键值对中的值就为'String'或'Array'形式,为true的时候,则可为任何数据类型。
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.post('/form', (req, res) => {
    // post 请求参数可通过 req.body
    console.log(req.body)
    var data = fs.readFileSync('./resources/success.json')
    var result = JSON.parse(data)
    res.send(result)
})
  • 使用json文件存储响应的数据,简化index.js,易于管理,并且方便修改。
  • json文件的内容需要自己去根据定义好的接口规范去编写假数据。
Charles

1、Local Map


Local Map

使用Local Map,可以直接重定向到指定的json文件,实现Mock,无需搭建Express服务。

2、Remote Map

Remote Map

注:localhost == 127.0.0.1
使用Remote Map,可以重定向到本地搭建的Express服务。Path属性是index.js中app.get()/app.post()方法中第一个参数,要求相互对应才能生效。query属性就是接口携带的请求参数,不需要设置。

总述:完成以上的操作,就可以实现Mock数据,来解藕前端与服务端并行开发,使得前端能独立的完成模块化开发,并灵活的调试本地数据,提高开发效率。

其他

1、json文件就是自己创建的假数据,其内容需要自己根据接口规范去完成。如果使用swagger来定义的接口文档,可直接复制其示例。
2、使用json文件的形式,利于代码整洁,便于修改。
3、可以只使用json文件+Charles Local Map的形式来实现Mock,缺点在于无法模拟实现相关业务逻辑。
4、其实可以只使用Express,通过App直接访问http://localhost:3000服务来实现Mock,但是需要修改App工程代码的接口请求,具有侵害性。而Charles的Map的存在就是为了分离Express与App,做到无侵入Mock。

拓展

  • NEI 网易提供的商用的接口管理平台
  • YAPl 去哪儿网提供的商用的接口管理平台
  • Mock.js 前端Mock的框架

等等,网上的一些接口管理的平台,都有提供Mock数据的功能(暂称Remote Mock)。

Remote Mock与Local Mock的区别:

  • Remote Mock是生成随机的数据,而Local Mock是自己编写的数据。Remote Mock更倾向与数据的随机性,所以无法体现数据之间的关联性。Local Mock的数据需要自身编写json文件,带有自己的主观性,更倾向于业务数据,可有主观意识来控制数据之间的关联。
  • Remote Mock适用于团队开发,主要是为团队/项目服务。在没有Remote Mock的情况下,Local Mock更适用于个体。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342