APP开发模拟API

模拟数据演示.gif

测试API的模拟主要分以下2块

  • 1.模拟服务器
  • 2.模拟测试数据

一、模拟服务器解决方案

1).使用Apache开启 Web Server

Mac自己集成了PythonApache

启动:sudo apachectl start

停止:sudo apachectl stop
重启:sudo apachectl restart
查看 Apache 版本: httpd -v

浏览器打开 http://127.0.0.1 可以看到 It works! 的页面.

  1. 使用本地回环测试地址http://127.0.0.1
  2. 使用http://locahost

mac下Apache的默认文件夹为/Library/WebServer/Documents

在该目录添加一个名为test.json文件

浏览器输入http://127.0.0.1/test 即可看到test.json文件内容

修改Apache目录

以上说的有点杂,折腾很久还是出现Forbidden You don't have permission to access / on this server.

上面说到了mac下Apache的默认文件夹为/Library/WebServer/Documents,该目录默认是隐藏的,操作不是很方便,我们可以将其修改成自定义的目录。

  • 1.1、打开终端,输入命令:sudo vim /etc/apache2/httpd.conf

也可以找到httpd.conf文件进行编辑

$ cd /etc/apache2   #进入文件夹
$ open .            #打开文件夹
  • 1.2、找到如下两处

DocumentRoot "/Library/WebServer/Documents"
  <Directory "/Library/WebServer/Documents">

  • 1.3、将两处中引号中的目录替换为自定义的目录,如"/Library/apacheWeb"

完成以上三步后,重启Apache,浏览器输入http://127.0.0.1

Forbidden You don't have permission to access / on this server.

这个折腾了好久,修改权限sudo chmod -R 777 apacheWeb也不行,灵机一动把/Library/WebServer/Documents目录中的index.html.en文件拷贝到自定义的目录,sudo apachectl restart 后就可以看到 It works! 的页面!

访问某一文件如:http://127.0.0.1/db

其它修改方式参考

Mac 下修改 PHP 本地服务器路径

mac 升级后配置 apache 到个人目录

2).使用Python开启 Web Server

相比Apache更简单不需要改本地服务器路径,随便进入一个目录即可开启

$ python -m SimpleHTTPServer         #默认8000端口
$ python -m SimpleHTTPServer 8080    #指定端口为8080

python会以当前目录作为根目录起一个本地server, 访问localhost:8000就可以看到效果了。

3)使用Node.js 模拟服务器

3.1 json-server

3.1.1、全局json-server安装

$ sudo npm install json-server -g

安装完成后可以用 json-server -h 命令检查是否安装成功,成功后会出现帮助命令选项。

3.1.2.启动server

$ cd  ~/Desktop/mock                #进入db.js文件目录
$ json-server --watch db.json       #启动监听服务,当然也可以监听js,json,text,md等文本文件

如果成功会出现:

 \{^_^}/ hi!
 {xxx: 'xxx'}
  Home
  http://localhost:3000

json-server启动默认端口为3000;

这个时候访问 http://localhost:3000/db可以查看所定义的全部数据。

更多:前后端分离下的接口数据模拟

3.2 使用http-server搭建静态服务器

1.安装http-server

npm install http-server -g

2.启动

http-server -a 127.0.0.1                #默认端口8080
http-server -a 127.0.0.1 -p 9999        #指定端口9999

更多:https://www.npmjs.com/package/http-server

3.2 ohana

ohana 是一个返回模拟 json 数据的 node http 服务器,默认集成了 mockjs 生成动态的 json 数据,支持 POST, GET, PUT, DELETE 四种请求。

特点:

常用web服务器框架

开源项目:

二、模拟数据生成

1.常用node.js数据模拟库

faker.js

mock.js

2.生成模拟 JSON 在线工具:
3.JSON API 在线模拟工具:
代理服务器
  • 使用 charles作为代理服务器
  • 使用代理服务器的 map(映射)& rewrite(重写)功能

示例代码:

mock.js 生成模拟数据,其它如json-server,koa,express等直接引用生成的数据就行

// 使用 Mock 保存为mock_users.js
var Mock = require('mockjs')
let Random = Mock.Random;

function generateCustomers () {
    var total=10;
    var customers = []
    for (var id = 0; id < total; id++) {
        var firstName =Random.cname();
        var email =Random.email("pconline.com.cn");
        var gender = Random.pick(['男', '女']);       
        customers.push({
            "id": id,
            "first_name": firstName,
            "Gender": gender,
            'email': email,
        })
    }
    var data = Mock.mock({ "customers": customers})
    return {"customers": customers,
            "stateCode":"200",
            "total":"85"
            }
}
var jsonData = JSON.stringify(generateCustomers());//转换为json字符格式,在服务器端直接解析req.body  
exports.mockJson = function () {
    return jsonData;
};

exports.mockJson2 = function () {
    return generateCustomers();
};


exports.mockJsonTest = function () {
    return  {"customers":"hello world"};
};

使用json-server模拟http server

//保存为 jsonserverMockAPI.js
var customUser = require('./mock_users2.js');//引入模拟数据js文件
// 如果你要用json-server的话,就需要export这个生成fake data的function
module.exports = function() {
//  var jsonData = JSON.stringify(generateCustomers2());//转换为json字符格式,在服务器端直接解析req.body  
    return customUser.mockJson3();
}

运行服务 json-server --watch jsonserverMockAPI.js

使用express模拟http server

// 引入 `express` 模块
var express = require('express');
// 调用 express 实例
var app = express();
var customUser = require('./mock_users.js');//引入模拟数据js文件
//console.log( '生成模拟数据\n' + customUser.mockJson());

var jsonData1 = customUser.mockJson();//转换为json字符格式,在服务器端直接解析req.body  
// app 本身有很多方法,其中包括最常用的 get、post、put/patch、delete,在这里我们调用其中的 get 方法,为我们的 `/` 路径指定一个 handler 函数。
// req和res是reques和response的缩写
var jsonData = customUser.mockJson2();//转换为json字符格式,在服务器端直接解析req.body  


app.get('/', function (req, res) {
    res.contentType('json');//返回的数据类型  
        res.send(jsonData);//给客户端返回一个json格式的数据  
        res.end();  
});
 
// 监听本地的 3000 端口
app.listen(3000, function () {
    console.log('监听3000端口');
});

使用koa模拟http server

//保存为如:KoaMockAPI001.js
//使用教程 https://cnodejs.org/topic/5709959abc564eaf3c6a48c8 
var customUser = require('./mock_users.js');//引入模拟数据js文件
console.log( '生成模拟数据\n' + customUser.mockJson());

var Koa = require('koa');
var app = new Koa();
// 此处开始堆叠各种中间件
//...

// response
app.use(ctx => {
    ctx.body = customUser.mockJson();
});

app.listen(3000);

如何自动化

可以用如nodemon 去启动你的 express

https://github.com/remy/nodemon

nodemon app.js

模拟数据演示Demo html代码

<!-- https://gxnotes.com/article/33145.html 代码显示 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="http://mockjs.com/dist/mock.js"></script>
<script src="https://cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>
<script src="https://cdn.bootcss.com/highlightjs-line-numbers.js/2.0.0/highlightjs-line-numbers.js"></script>
<link href="https://cdn.bootcss.com/highlight.js/9.12.0/styles/agate.min.css" rel="stylesheet">
<script>
hljs.initHighlightingOnLoad();
hljs.initLineNumbersOnLoad();
</script>
<style>

td.hljs-ln-numbers {
text-align: center;
color: #ccc;
border-right: 1px solid #999;
vertical-align: top;
padding-right: 5px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}

td.hljs-ln-code {
padding-left: 10px;
}

code {
white-space: pre-wrap;
overflow: auto;
}
#wrapper {
max-width: 500px;
margin: 0 auto;
}
</style>
</head>
<body>
<!--创建超级链接-->
<div>模拟数据: <a href="http://mockjs.com/" target="_blank">http://mockjs.com/</a></div>
<div>生成JSON API: <a href="http://www.jsonohyeah.com/" target="_blank">http://www.jsonohyeah.com/</a></div>
<div><h4 id="mockjs">mockjs+jsonohyeah模拟接口数据</h4></div>
<style>
pre{
margin-bottom: 10px;
overflow: auto;
width: 90%;
padding: 10px;
padding-bottom: 20px!ie7;
max-height: 300px;
}
</style>
<script>// 使用 Mock
var mockjsObj= {
'total': 20,
'pageNo': 1,
"code": 0,
"message": '@cparagraph()',
// 属性 result 的值是一个数组,其中含有 1 到 n 个元素
'result|1-20': [{
// 属性 id 是一个自增数,起始值为 1,每次增 1
'id|+1': 1,
'title|1-6': '我是标题 ', //5x6 30字以内的标题
"content" : "@cparagraph()", //模拟文本
"date": "@date('yyyy-MM-dd')",//模拟时间
"image" : "@image()",    //模拟图片URL
'color' : '@color', //模拟颜色
'userName' : '@name',
"age|1-100":100, //模拟年龄(1-100)
"url" : "@url()" //模拟url
}]
};
function mockreloadPage()
{
/*获取下拉列表的值*/
var selectval = $('textarea#runcode_mock').val();
mockjsObj=JSON.parse(selectval);
var mockjsStingTest=JSON.stringify(mockjsObj,null,0);
console.log("selectvalv"+mockjsStingTest);
var data = Mock.mock(
mockjsObj
);
// 输出结果
console.log(JSON.stringify(data, null, 4))
console.log("mockreloadPage")
$("#result").text(JSON.stringify(data,null,2));
hljs.initHighlighting.called = false;
hljs.initHighlighting();
hljs.initLineNumbersOnLoad();
}
</script> 
<h4>模拟规则(可修改)</h4>
<textarea class="pt" id="runcode_mock" rows="10" style='padding:10px;;width:90%'></textarea>
<script>$("textarea#runcode_mock").val(JSON.stringify(mockjsObj,null,2));</script>
<h4 id="mockResult">模拟结果</h4>
<button id="button_id">生成模拟数据</button> 
<pre><code class="json" id="result">#点击按钮生成模拟数据#</code></pre>
<script>
//调用mock方法模拟数据
$("#button_id").click(function(){
mockreloadPage();
});
</script>
</body>
</html>

Related Posts:

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

推荐阅读更多精彩内容