@4fun/mockit 中文文档教程

发布于 6年前 浏览 47 项目主页 更新于 3年前

mockit

用于前端开发的 Http API mock

Install

npm i -g @4fun/mockit

Usage

mockit -h

输出:

Usage: mockit [options] [config]

options:
   -H, --host=<host>       host name
   -P, --port=<port>       port number
   -S, --ssl               enable https
       --http2             enable http2
       --template=<path>   template file path
       --routes=<path>     routes file path
       --watch             enable routes file watch
       --persist=<path>    dump file path
   -C, --cert=<path>       ssl cert file path
   -K, --key=<path>        ssl key file path
   -O, --open              open browser
       --verbose           output verbose info
   -h, --help              show this help

快速启动:

mockit

从配置文件

mockit ./config.yml
mockit ./config.json

Config

config.yml

# 0.0.0.0 to listen from anywhere
host: "127.0.0.1"
# 0 to assign an available port
port: 0
# enable http2 support(requires ssl)
http2: false
ssl:
  # enable ssl support
  enabled: false
  cert: "/path/to/cert/file"
  key: "/path/to/key/file"
# enable verbose debug
debug: true
# enable request logging
logger:
  enabled: true
  # morgan types: combined|common|dev|short|tiny
  type: "combined"
dashboard:
  # dashboard base url
  baseUrl: "/dashboard"
  # template config(object) or path to template file(absolute or relative to this config file)
  template: "template.yml"
router:
  # enable CORS
  cors: true
  # routes config(object) or path to routes file(absolute or relative to this config file)
  routes: "routes.yml"

config.json

{
  "host": "127.0.0.1",
  "port": 0,
  "http2": false,
  "ssl": {
    "enabled": false,
    "cert": "/path/to/cert/file",
    "key": "/path/to/key/file"
  },
  "debug": true,
  "logger": {
    "enabled": true,
    "type": "combined"
  },
  "dashboard": {
    "baseUrl": "/dashboard",
    "template": "template.yml"
  },
  "router": {
    "cors": true,
    "routes": "routes.yml"
  }
}

routes.yml

# method and path
GET /api/v1/account:
  # bypass(disable) this route
  bypass: false
  # simulate response delay in milliseconds
  delay: 1000
  # http status code
  code: 200
  # response headers
  headers:
    Content-Type: "application/json"
    Server: "Nginx"
  # response body(string)
  body: '{"name":"admin"}'
PUT /api/v1/account:
  bypass: false
  delay: 0
  code: 204
  headers:
    Content-Type: "application/json"
    Server: "Nginx"

routes.json

{
  "GET /api/v1/account": {
    "bypass": false,
    "delay": 1000,
    "code": 200,
    "headers": {
      "Content-Type": "application/json",
      "Server": "Nginx"
    },
    "body": "{\"name\":\"admin\"}"
  },
  "PUT /api/v1/account": {
    "bypass": false,
    "delay": 0,
    "code": 200,
    "headers": {
      "Content-Type": "application/json",
      "Server": "Nginx"
    }
  }
}

template.yml

# http methods
methods:
  - "GET"
  - "HEAD"
  - "POST"
  - "PUT"
  - "DELETE"
  - "CONNECT"
  - "OPTIONS"
  - "TRACE"
  - "PATCH"
# http status codes and descriptions
codes:
  "100": "Continue"
  "101": "Switching Protocols"
  "102": "Processing"
  "200": "OK"
  "201": "Created"
  "202": "Accepted"
  "203": "Non-Authoritative Information"
  "204": "No Content"
  "205": "Reset Content"
  "206": "Partial Content"
  "207": "Multi-Status"
  "208": "Already Reported"
  "226": "IM Used"
  "300": "Multiple Choices"
  "301": "Moved Permanently"
  "302": "Found"
  "303": "See Other"
  "304": "Not Modified"
  "305": "Use Proxy"
  "306": "Switch Proxy"
  "307": "Temporary Redirect"
  "308": "Permanent Redirect"
  "400": "Bad Request"
  "401": "Unauthorized"
  "402": "Payment Required"
  "403": "Forbidden"
  "404": "Not Found"
  "405": "Method Not Allowed"
  "406": "Not Acceptable"
  "407": "Proxy Authentication Required"
  "408": "Request Timeout"
  "409": "Conflict"
  "410": "Gone"
  "411": "Length Required"
  "412": "Precondition Failed"
  "413": "Payload Too Large"
  "414": "URI Too Long"
  "415": "Unsupported Media Type"
  "416": "Range Not Satisfiable"
  "417": "Expectation Failed"
  "418": "I'm a teapot"
  "421": "Misdirected Request"
  "422": "Unprocessable Entity"
  "423": "Locked"
  "424": "Failed Dependency"
  "425": "Unordered Collection"
  "426": "Upgrade Required"
  "428": "Precondition Required"
  "429": "Too Many Requests"
  "431": "Request Header Fields Too Large"
  "444": "No Response"
  "449": "Retry With"
  "450": "Blocked by Windows Parental Controls"
  "451": "Unavailable For Legal Reasons"
  "499": "Client Closed Request"
  "500": "Internal Server Error"
  "501": "Not Implemented"
  "502": "Bad Gateway"
  "503": "Service Unavailable"
  "504": "Gateway Timeout"
  "505": "HTTP Version Not Supported"
  "506": "Variant Also Negotiates"
  "507": "Insufficient Storage"
  "509": "Bandwidth Limit Exceeded"
  "510": "Not Extended"
  "511": "Network Authentication Required"
# response types
mime:
  - "application/json"
  - "application/x-www-form-urlencoded"
  - "application/xhtml+xml"
  - "application/xml"
  - "multipart/form-data"
  - "text/css"
  - "text/csv"
  - "text/html"
  - "text/json"
  - "text/plain"
  - "text/xml"

template.json开始

{
  "methods": [
    "GET",
    "HEAD",
    "POST",
    "PUT",
    "DELETE",
    "CONNECT",
    "OPTIONS",
    "TRACE",
    "PATCH"
  ],
  "codes": {
    "100": "Continue",
    "101": "Switching Protocols",
    "102": "Processing",
    "200": "OK",
    "201": "Created",
    "202": "Accepted",
    "203": "Non-Authoritative Information",
    "204": "No Content",
    "205": "Reset Content",
    "206": "Partial Content",
    "207": "Multi-Status",
    "208": "Already Reported",
    "226": "IM Used",
    "300": "Multiple Choices",
    "301": "Moved Permanently",
    "302": "Found",
    "303": "See Other",
    "304": "Not Modified",
    "305": "Use Proxy",
    "306": "Switch Proxy",
    "307": "Temporary Redirect",
    "308": "Permanent Redirect",
    "400": "Bad Request",
    "401": "Unauthorized",
    "402": "Payment Required",
    "403": "Forbidden",
    "404": "Not Found",
    "405": "Method Not Allowed",
    "406": "Not Acceptable",
    "407": "Proxy Authentication Required",
    "408": "Request Timeout",
    "409": "Conflict",
    "410": "Gone",
    "411": "Length Required",
    "412": "Precondition Failed",
    "413": "Payload Too Large",
    "414": "URI Too Long",
    "415": "Unsupported Media Type",
    "416": "Range Not Satisfiable",
    "417": "Expectation Failed",
    "418": "I'm a teapot",
    "421": "Misdirected Request",
    "422": "Unprocessable Entity",
    "423": "Locked",
    "424": "Failed Dependency",
    "425": "Unordered Collection",
    "426": "Upgrade Required",
    "428": "Precondition Required",
    "429": "Too Many Requests",
    "431": "Request Header Fields Too Large",
    "444": "No Response",
    "449": "Retry With",
    "450": "Blocked by Windows Parental Controls",
    "451": "Unavailable For Legal Reasons",
    "499": "Client Closed Request",
    "500": "Internal Server Error",
    "501": "Not Implemented",
    "502": "Bad Gateway",
    "503": "Service Unavailable",
    "504": "Gateway Timeout",
    "505": "HTTP Version Not Supported",
    "506": "Variant Also Negotiates",
    "507": "Insufficient Storage",
    "509": "Bandwidth Limit Exceeded",
    "510": "Not Extended",
    "511": "Network Authentication Required"
  },
  "mime": [
    "application/json",
    "application/x-www-form-urlencoded",
    "application/xhtml+xml",
    "application/xml",
    "multipart/form-data",
    "text/css",
    "text/csv",
    "text/html",
    "text/json",
    "text/plain",
    "text/xml"
  ]
}

mockit

Http API mock for frontend development

Install

npm i -g @4fun/mockit

Usage

mockit -h

Output:

Usage: mockit [options] [config]

options:
   -H, --host=<host>       host name
   -P, --port=<port>       port number
   -S, --ssl               enable https
       --http2             enable http2
       --template=<path>   template file path
       --routes=<path>     routes file path
       --watch             enable routes file watch
       --persist=<path>    dump file path
   -C, --cert=<path>       ssl cert file path
   -K, --key=<path>        ssl key file path
   -O, --open              open browser
       --verbose           output verbose info
   -h, --help              show this help

Quick start:

mockit

Start from config file

mockit ./config.yml
mockit ./config.json

Config

config.yml

# 0.0.0.0 to listen from anywhere
host: "127.0.0.1"
# 0 to assign an available port
port: 0
# enable http2 support(requires ssl)
http2: false
ssl:
  # enable ssl support
  enabled: false
  cert: "/path/to/cert/file"
  key: "/path/to/key/file"
# enable verbose debug
debug: true
# enable request logging
logger:
  enabled: true
  # morgan types: combined|common|dev|short|tiny
  type: "combined"
dashboard:
  # dashboard base url
  baseUrl: "/dashboard"
  # template config(object) or path to template file(absolute or relative to this config file)
  template: "template.yml"
router:
  # enable CORS
  cors: true
  # routes config(object) or path to routes file(absolute or relative to this config file)
  routes: "routes.yml"

config.json

{
  "host": "127.0.0.1",
  "port": 0,
  "http2": false,
  "ssl": {
    "enabled": false,
    "cert": "/path/to/cert/file",
    "key": "/path/to/key/file"
  },
  "debug": true,
  "logger": {
    "enabled": true,
    "type": "combined"
  },
  "dashboard": {
    "baseUrl": "/dashboard",
    "template": "template.yml"
  },
  "router": {
    "cors": true,
    "routes": "routes.yml"
  }
}

routes.yml

# method and path
GET /api/v1/account:
  # bypass(disable) this route
  bypass: false
  # simulate response delay in milliseconds
  delay: 1000
  # http status code
  code: 200
  # response headers
  headers:
    Content-Type: "application/json"
    Server: "Nginx"
  # response body(string)
  body: '{"name":"admin"}'
PUT /api/v1/account:
  bypass: false
  delay: 0
  code: 204
  headers:
    Content-Type: "application/json"
    Server: "Nginx"

routes.json

{
  "GET /api/v1/account": {
    "bypass": false,
    "delay": 1000,
    "code": 200,
    "headers": {
      "Content-Type": "application/json",
      "Server": "Nginx"
    },
    "body": "{\"name\":\"admin\"}"
  },
  "PUT /api/v1/account": {
    "bypass": false,
    "delay": 0,
    "code": 200,
    "headers": {
      "Content-Type": "application/json",
      "Server": "Nginx"
    }
  }
}

template.yml

# http methods
methods:
  - "GET"
  - "HEAD"
  - "POST"
  - "PUT"
  - "DELETE"
  - "CONNECT"
  - "OPTIONS"
  - "TRACE"
  - "PATCH"
# http status codes and descriptions
codes:
  "100": "Continue"
  "101": "Switching Protocols"
  "102": "Processing"
  "200": "OK"
  "201": "Created"
  "202": "Accepted"
  "203": "Non-Authoritative Information"
  "204": "No Content"
  "205": "Reset Content"
  "206": "Partial Content"
  "207": "Multi-Status"
  "208": "Already Reported"
  "226": "IM Used"
  "300": "Multiple Choices"
  "301": "Moved Permanently"
  "302": "Found"
  "303": "See Other"
  "304": "Not Modified"
  "305": "Use Proxy"
  "306": "Switch Proxy"
  "307": "Temporary Redirect"
  "308": "Permanent Redirect"
  "400": "Bad Request"
  "401": "Unauthorized"
  "402": "Payment Required"
  "403": "Forbidden"
  "404": "Not Found"
  "405": "Method Not Allowed"
  "406": "Not Acceptable"
  "407": "Proxy Authentication Required"
  "408": "Request Timeout"
  "409": "Conflict"
  "410": "Gone"
  "411": "Length Required"
  "412": "Precondition Failed"
  "413": "Payload Too Large"
  "414": "URI Too Long"
  "415": "Unsupported Media Type"
  "416": "Range Not Satisfiable"
  "417": "Expectation Failed"
  "418": "I'm a teapot"
  "421": "Misdirected Request"
  "422": "Unprocessable Entity"
  "423": "Locked"
  "424": "Failed Dependency"
  "425": "Unordered Collection"
  "426": "Upgrade Required"
  "428": "Precondition Required"
  "429": "Too Many Requests"
  "431": "Request Header Fields Too Large"
  "444": "No Response"
  "449": "Retry With"
  "450": "Blocked by Windows Parental Controls"
  "451": "Unavailable For Legal Reasons"
  "499": "Client Closed Request"
  "500": "Internal Server Error"
  "501": "Not Implemented"
  "502": "Bad Gateway"
  "503": "Service Unavailable"
  "504": "Gateway Timeout"
  "505": "HTTP Version Not Supported"
  "506": "Variant Also Negotiates"
  "507": "Insufficient Storage"
  "509": "Bandwidth Limit Exceeded"
  "510": "Not Extended"
  "511": "Network Authentication Required"
# response types
mime:
  - "application/json"
  - "application/x-www-form-urlencoded"
  - "application/xhtml+xml"
  - "application/xml"
  - "multipart/form-data"
  - "text/css"
  - "text/csv"
  - "text/html"
  - "text/json"
  - "text/plain"
  - "text/xml"

template.json

{
  "methods": [
    "GET",
    "HEAD",
    "POST",
    "PUT",
    "DELETE",
    "CONNECT",
    "OPTIONS",
    "TRACE",
    "PATCH"
  ],
  "codes": {
    "100": "Continue",
    "101": "Switching Protocols",
    "102": "Processing",
    "200": "OK",
    "201": "Created",
    "202": "Accepted",
    "203": "Non-Authoritative Information",
    "204": "No Content",
    "205": "Reset Content",
    "206": "Partial Content",
    "207": "Multi-Status",
    "208": "Already Reported",
    "226": "IM Used",
    "300": "Multiple Choices",
    "301": "Moved Permanently",
    "302": "Found",
    "303": "See Other",
    "304": "Not Modified",
    "305": "Use Proxy",
    "306": "Switch Proxy",
    "307": "Temporary Redirect",
    "308": "Permanent Redirect",
    "400": "Bad Request",
    "401": "Unauthorized",
    "402": "Payment Required",
    "403": "Forbidden",
    "404": "Not Found",
    "405": "Method Not Allowed",
    "406": "Not Acceptable",
    "407": "Proxy Authentication Required",
    "408": "Request Timeout",
    "409": "Conflict",
    "410": "Gone",
    "411": "Length Required",
    "412": "Precondition Failed",
    "413": "Payload Too Large",
    "414": "URI Too Long",
    "415": "Unsupported Media Type",
    "416": "Range Not Satisfiable",
    "417": "Expectation Failed",
    "418": "I'm a teapot",
    "421": "Misdirected Request",
    "422": "Unprocessable Entity",
    "423": "Locked",
    "424": "Failed Dependency",
    "425": "Unordered Collection",
    "426": "Upgrade Required",
    "428": "Precondition Required",
    "429": "Too Many Requests",
    "431": "Request Header Fields Too Large",
    "444": "No Response",
    "449": "Retry With",
    "450": "Blocked by Windows Parental Controls",
    "451": "Unavailable For Legal Reasons",
    "499": "Client Closed Request",
    "500": "Internal Server Error",
    "501": "Not Implemented",
    "502": "Bad Gateway",
    "503": "Service Unavailable",
    "504": "Gateway Timeout",
    "505": "HTTP Version Not Supported",
    "506": "Variant Also Negotiates",
    "507": "Insufficient Storage",
    "509": "Bandwidth Limit Exceeded",
    "510": "Not Extended",
    "511": "Network Authentication Required"
  },
  "mime": [
    "application/json",
    "application/x-www-form-urlencoded",
    "application/xhtml+xml",
    "application/xml",
    "multipart/form-data",
    "text/css",
    "text/csv",
    "text/html",
    "text/json",
    "text/plain",
    "text/xml"
  ]
}
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文