iOS Local Mock

2019-12-25  本文已影响0人  oncezou

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

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

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

Local Mock方案

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

1、工具

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

2、思路

实践

Express

1、搭建工程

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

2、编写项目

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)
})
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。

拓展

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

Remote Mock与Local Mock的区别:

上一篇 下一篇

猜你喜欢

热点阅读