Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jaywcjlove/mocker-api
mocker-api that creates mocks for REST APIs. It will be helpful when you try to test your application without the actual REST API server.
https://github.com/jaywcjlove/mocker-api
mock-data mock-server mockjs mockup webpack webpack-dev-server webpack3 webpack4
Last synced: about 1 month ago
JSON representation
mocker-api that creates mocks for REST APIs. It will be helpful when you try to test your application without the actual REST API server.
- Host: GitHub
- URL: https://github.com/jaywcjlove/mocker-api
- Owner: jaywcjlove
- License: mit
- Created: 2018-02-07T16:37:03.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-04-16T18:53:28.000Z (7 months ago)
- Last Synced: 2024-05-28T17:49:08.138Z (6 months ago)
- Topics: mock-data, mock-server, mockjs, mockup, webpack, webpack-dev-server, webpack3, webpack4
- Language: JavaScript
- Homepage: https://jaywcjlove.github.io/mocker-api
- Size: 5.27 MB
- Stars: 483
- Watchers: 8
- Forks: 68
- Open Issues: 29
-
Metadata Files:
- Readme: README-zh.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
English ·
快速开始 ·
使用 ·
参数设置 ·
延迟响应 ·
实例 ·
License ·
Type`mocker-api` 为 REST API 创建模拟。 当您尝试在没有实际 REST API 服务器的情况下测试应用程序时,这将很有帮助。
**特点:**
🔥 内置对 Mocker 文件热更新支持。
🚀 通过JSON快速轻松地配置API。
🌱 模拟API代理变得简单。
💥 可以独立使用,而无需依赖 [webpack](https://github.com/webpack/webpack) 和 [webpack-dev-server](https://github.com/webpack/webpack-dev-server)。## 快速开始
```bash
mkdir mocker-app && cd mocker-app# 根据规则创建模拟程序配置文件
touch api.js# 全局安装。
npm install mocker-api -g
# 运行服务
mocker ./api.js# Run server at localhost:8000
mocker ./api.js --host localhost --port 8000
```## 安装
您可以将其 `package.json` 配置作为当前项目依赖项。
```bash
npm install mocker-api --save-dev
```## 使用
`mocker-api` 支持模拟,在 `mocker / index.js` 中配置。
您可以修改 [http-proxy](https://www.npmjs.com/package/http-proxy) 选项并通过添加 `httpProxy` 配置来添加事件监听器
```js
const proxy = {
// 优先处理。
// apiMocker(app, path, option)
// 这是 apiMocker 的选项参数设置 `option`
_proxy: {
proxy: {
// 将路径字符串(例如`/user/:name`)转换为正则表达式。
// https://www.npmjs.com/package/path-to-regexp
'/repos/(.*)': 'https://api.github.com/',
'/:owner/:repo/raw/:ref/(.*)': 'http://127.0.0.1:2018',
'/api/repos/(.*)': 'http://127.0.0.1:3721/'
},
// 重写目标网址路径。对象键将用作RegEx来匹配路径。
// https://github.com/jaywcjlove/mocker-api/issues/62
pathRewrite: {
'^/api/repos/': '/repos/',
},
changeHost: true,
// 修改 http-proxy 选项
httpProxy: {
options: {
ignorePath: true,
},
listeners: {
proxyReq: function (proxyReq, req, res, options) {
console.log('proxyReq');
},
},
},
},
// =====================
// 默认的 GET 请求。
// https://github.com/jaywcjlove/mocker-api/pull/63
'/api/user': {
id: 1,
username: 'kenny',
sex: 6
},
'GET /api/user': {
id: 1,
username: 'kenny',
sex: 6
},
'GET /api/user/list': [
{
id: 1,
username: 'kenny',
sex: 6
}, {
id: 2,
username: 'kenny',
sex: 6
}
],
'GET /api/:owner/:repo/raw/:ref/(.*)': (req, res) => {
const { owner, repo, ref } = req.params;
// http://localhost:8081/api/admin/webpack-mock-api/raw/master/add/ddd.md
// owner => admin
// repo => webpack-mock-api
// ref => master
// req.params[0] => add/ddd.md
return res.json({
id: 1,
owner, repo, ref,
path: req.params[0]
});
},
'POST /api/login/account': (req, res) => {
const { password, username } = req.body;
if (password === '888888' && username === 'admin') {
return res.json({
status: 'ok',
code: 0,
token: "sdfsdfsdfdsf",
data: {
id: 1,
username: 'kenny',
sex: 6
}
});
} else {
return res.status(403).json({
status: 'error',
code: 403
});
}
},
'DELETE /api/user/:id': (req, res) => {
console.log('---->', req.body)
console.log('---->', req.params.id)
res.send({ status: 'ok', message: '删除成功!' });
}
}
module.exports = proxy;
```## 参数设置
- [`proxy`](https://www.npmjs.com/package/path-to-regexp) => `{}` Proxy settings, Turn a path string such as `/user/:name` into a regular expression.
- [`pathRewrite`](https://github.com/jaywcjlove/mocker-api/issues/62) => `{}` rewrite target's url path. Object-keys will be used as RegExp to match paths. [#62](https://github.com/jaywcjlove/mocker-api/issues/62)
- `withFullUrlPath=false` => `Boolean` the proxy regular expression support full url path. if the proxy regular expression like `/test?a=1&b=1` can be matched. [#25](https://github.com/jaywcjlove/mocker-api/issues/25)
- `priority` => `proxy` priority `proxy` or `mocker` [#151](https://github.com/jaywcjlove/mocker-api/issues/151)
- `changeHost` => `Boolean` Setting req headers host.
- `httpProxy` => `{}` Set the [listen event](https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events) and [configuration](https://github.com/nodejitsu/node-http-proxy#options) of [http-proxy](https://github.com/nodejitsu/node-http-proxy)
- [`bodyParserJSON`](https://github.com/expressjs/body-parser/tree/56a2b73c26b2238bc3050ad90af9ab9c62f4eb97#bodyparserjsonoptions) JSON body parser
- [`bodyParserText`](https://github.com/expressjs/body-parser/tree/56a2b73c26b2238bc3050ad90af9ab9c62f4eb97#bodyparsertextoptions) Text body parser
- [`bodyParserRaw`](https://github.com/expressjs/body-parser/tree/56a2b73c26b2238bc3050ad90af9ab9c62f4eb97#bodyparserrawoptions) Raw body parser
- [`bodyParserUrlencoded`](https://github.com/expressjs/body-parser/tree/56a2b73c26b2238bc3050ad90af9ab9c62f4eb97#bodyparserurlencodedoptions) URL-encoded form body parser
- `bodyParserConf` => `{}` bodyParser settings. eg: `bodyParserConf : {'text/plain': 'text','text/html': 'text'}` will parsed `Content-Type='text/plain' and Content-Type='text/html'` with `bodyParser.text`
- [`watchOptions`](https://github.com/paulmillr/chokidar#api) => `object` Options object as defined [chokidar api options](https://github.com/paulmillr/chokidar#api)
- `header` => `{}` Access Control Allow options.
```js
{
header: {
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT, DELETE',
}
}
```⚠️ No wildcard asterisk ~~`*`~~ - use parameters instead `(.*)`, support `v1.7.3+`
## 延迟响应
您可以使用功能性工具来增强模拟效果。[#17](https://github.com/jaywcjlove/webpack-api-mocker/issues/17)
```js
const delay = require('mocker-api/delay');
const noProxy = process.env.NO_PROXY === 'true';const proxy = {
'GET /api/user': {
id: 1,
username: 'kenny',
sex: 6
},
// ...
}
module.exports = (noProxy ? {} : delay(proxy, 1000));
```## apiMocker
```js
apiMocker(app, mockerFilePath[, options])
apiMocker(app, Mocker[, options])
```多个模拟文件监听
```js
const apiMocker = require('mocker-api');
const mockerFile = ['./mock/index.js'];
// or
// const mockerFile = './mock/index.js';
apiMocker(app, mockerFile, options)
```## 实例
### 在命令行中使用
[Base example](example/base)
>⚠️ Not dependent on [webpack](https://github.com/webpack/webpack) and [webpack-dev-server](https://github.com/webpack/webpack-dev-server).
```bash
# Global install dependent.
npm install mocker-api -g
# Run server
mocker ./mocker/index.js
```Or you can put it the `package.json` config as a current project dependency.
```diff
{
"name": "base-example",
"scripts": {
+ "api": "mocker ./mocker"
},
"devDependencies": {
+ "mocker-api": "2.9.5"
},
"license": "MIT"
}
```### 在 [Express](https://github.com/expressjs/express) 中使用
[Express example](https://github.com/jaywcjlove/mocker-api/tree/master/example/express)
>⚠️ Not dependent on [webpack](https://github.com/webpack/webpack) and [webpack-dev-server](https://github.com/webpack/webpack-dev-server).
```diff
const express = require('express');
+ const path = require('path');
+ const apiMocker = require('mocker-api');const app = express();
+ apiMocker(app, path.resolve('./mocker/index.js'))
app.listen(8080);
```or
```diff
const express = require('express');
+ const apiMocker = require('mocker-api');const app = express();
+ apiMocker(app, {
+ 'GET /api/user': {
+ id: 1,
+ sex: 0
+ }
+ });app.listen(8080);
```### 在 [Webpack](https://github.com/webpack/webpack) 中使用
[webpack example](https://github.com/jaywcjlove/mocker-api/tree/master/example/webpack)
To use api mocker on your [Webpack](https://github.com/webpack/webpack) projects, simply add a setup options to your [webpack-dev-server](https://github.com/webpack/webpack-dev-server) options:
Change your config file to tell the dev server where to look for files: `webpack.config.js`.
```diff
const HtmlWebpackPlugin = require('html-webpack-plugin');
+ const path = require('path');
+ const apiMocker = require('mocker-api');module.exports = {
entry: {
app: './src/index.js',
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
+ devServer: {
+ ...
+ before(app){
+ apiMocker(app, path.resolve('./mocker/index.js'), {
+ proxy: {
+ '/repos/*': 'https://api.github.com/',
+ '/:owner/:repo/raw/:ref/*': 'http://127.0.0.1:2018'
+ },
+ changeHost: true,
+ })
+ }
+ },
plugins: [
new HtmlWebpackPlugin({
template: path.resolve('./public/index.html'),
title: 'Webpack App Mocker API'
})
],
};
```Must have a file suffix! For example: `./mocker/index.js`.
Let's add a script to easily run the dev server as well: `package.json`
```diff
{
"name": "development",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
+ "start": "webpack serve --progress --mode development",
"build": "webpack --mode production"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"html-webpack-plugin": "4.5.0",
"mocker-api": "2.9.5",
"webpack": "5.22.0",
"webpack-cli": "4.5.0",
"webpack-dev-server": "3.11.2"
}
}
```Mock API proxying made simple.
```diff
{
before(app){
+ apiMocker(app, path.resolve('./mocker/index.js'), {
+ proxy: {
+ '/repos/*': 'https://api.github.com/',
+ },
+ changeHost: true,
+ })
}
}
```### 在 create-react-app 中使用
[create-react-app example](https://github.com/jaywcjlove/mocker-api/tree/master/example/create-react-app)
创建 [`src/setupProxy.js`](https://github.com/jaywcjlove/mocker-api/blob/64a093685b05c70ab0ddcf3fd5dbede7871efa8a/example/create-react-app/src/setupProxy.js#L1-L11) 并放置以下内容:
```diff
+ const apiMocker = require('mocker-api');
+ const path = require('path');module.exports = function(app) {
+ apiMocker(app, path.resolve('./mocker/index.js'), {
+ proxy: {
+ '/repos/(.*)': 'https://api.github.com/',
+ },
+ changeHost: true,
+ });
};
``````diff
{
.....
"devDependencies": {
+ "mocker-api": "2.9.5"
},
....
}
```### 开发
```shell
$ yarn install
$ yarn run build
$ yarn run watch
$ yarn run test
```## Contributors
As always, thanks to our amazing contributors!
Made with [github-action-contributors](https://github.com/jaywcjlove/github-action-contributors).
## License
[MIT © Kenny Wong](https://github.com/jaywcjlove/mocker-api/blob/master/LICENSE)