diff --git a/doc/page/plugin/dev.md b/doc/page/plugin/dev.md new file mode 100644 index 00000000..b7f6c7a5 --- /dev/null +++ b/doc/page/plugin/dev.md @@ -0,0 +1,63 @@ +## 运行开发服务器 +``` +npm install +npm install -g ykit //依赖 ykit +npm run dev +``` +## 初始化目录 + +可参考 项目vendors/exts 目录下的插件 + +在 vendors/node_modules 下新建 yapi-plugin-demo 目录和 npm init,最后生成的目录接口如下 +``` +yapi-plugin-demo + client.js //客户端入口文件 + server.js //服务端入口文件 + packjson.json //插件依赖管理 + index.js //插件配置文件 +``` + +## index.js 配置说明 +``` +server: true // 如果为true,表名该插件需要经过后端服务器加载 +client: true // 如果为true,表名该插件需要经过前端编译 +``` + +## server.js +在server.js 需要导出一个 function ,例如: module.exports = function(options){} + +options 可在 config.json 配置 +### 绑定钩子 +``` +this.bindHook(hookname, listener) //绑定钩子 +hookname //钩子名 +listener //监听函数,可以是普通函数,也可以是 asyncFunction +``` + +### 如何使用 YApi vendors/server 目录下的模块 +可以直接 require vendors 目录下的模块,注意:后端 node 不能使用 import关键字,只能使用 require +例如: require('yapi') + +### 加载插件 +在config.json plugins配置项,加入 demo,例如: +``` +{ + ... + plugins: { + name: 'demo' + } +} +``` + +### controller 和 model +新增 controller 需要继承 baseController(controller/base.js) + +新增 model 需要继承 baseModel(model/base.js) + +## client.js +### 绑定钩子(同后端 server.js ) +``` +this.bindHook(hookname, listener) //绑定钩子 +hookname //钩子名 +listener //监听函数,可以是普通函数,也可以是 asyncFunction +``` diff --git a/doc/page/plugin/hooks.md b/doc/page/plugin/hooks.md new file mode 100644 index 00000000..0ece845b --- /dev/null +++ b/doc/page/plugin/hooks.md @@ -0,0 +1,165 @@ +## 后端 hookList +目前 hooksList 只有下面列出的部分,如果您有其他的需求,可提建议到 github 或者 qq群 +``` +/** + * 钩子配置 + */ +var hooks = { + /** + * 第三方sso登录钩子,暂只支持设置一个 + * @param ctx + */ + 'third_login': { + type: 'single', + listener: null + }, + /** + * 客户端增加接口成功后触发 + * @param id 接口id + */ + 'interface_add': { + type: 'multi', + listener: [] + }, + /** + * 客户端删除接口成功后触发 + * @param id 接口id + */ + 'interface_del': { + type: 'multi', + listener: [] + }, + /** + * 客户端更新接口成功后触发 + * @param id 接口id + */ + 'interface_update':{ + type: 'multi', + listener: [] + }, + /** + * 客户端获取接口数据列表 + * @param id project_id + */ + 'interface_list':{ + type: 'multi', + listener: [] + }, + /** + * 客户端获取一条接口信息触发 + * @param id 接口id + */ + 'interface_get':{ + type: 'multi', + listener: [] + }, + /** + * 客户端增加一个新项目 + * @param id 项目id + */ + 'project_add':{ + type: 'multi', + listener: [] + }, + /** + * 客户端删除删除一个项目 + * @param id 项目id + */ + 'project_del':{ + type: 'multi', + listener: [] + }, + /** + * MockServer生成mock数据后触发 + * @param context Object + * { + * projectData: project, + interfaceData: interfaceData, + ctx: ctx, + mockJson: res + * } + * + */ + mock_after: { + type: 'multi', + listener: [] + }, + /** + * 增加路由的钩子 + * type Sync + * @param addPluginRouter Function + * addPLuginPLugin(config) + * config = { + * path, // String + * method, // String + * controller // Class 继承baseController的class + * action // String controller的Action + * } + */ + add_router: { + type: 'multi', + listener: [] + } +}; +``` + +## 前端 hookList +``` +/** + * type component 组件 + * listener 监听函数 + * mulit 是否绑定多个监听函数 + * + */ + +hooks = { + /** + * 第三方登录 //可参考 yapi-plugin-qsso 插件 + */ + third_login: { + type: 'component', + mulit: false, + listener: null + }, + /** + * 导入数据 + * @param importDataModule + * + * @info + * 可参考 vendors/exts/yapi-plugin-import-swagger插件 + * importDataModule = {}; + * + */ + import_data: { + type: 'listener', + mulit: true, + listener: [] + }, + /** + * 接口页面 tab 钩子 + * @param InterfaceTabs + * + * @info + * 可参考 vendors/exts/yapi-plugin-advanced-mock + * let InterfaceTabs = { + view: { + component: View, + name: '预览' + }, + edit: { + component: Edit, + name: '编辑' + }, + run: { + component: Run, + name: '运行' + } + } + */ + interface_tab: { + type: 'listener', + mulit: true, + listener: [] + } +}; +``` \ No newline at end of file diff --git a/doc/page/plugin/index.md b/doc/page/plugin/index.md new file mode 100644 index 00000000..03194e6f --- /dev/null +++ b/doc/page/plugin/index.md @@ -0,0 +1,13 @@ +## 安装 +假设插件名为:yapi-plugin-demo,安装方法如下: +``` +cd {项目目录} +yapi-cli plugin yapi-plugin-demo +``` + +## 卸载插件 +假设插件名为:yapi-plugin-demo,卸载方法如下: +``` +cd {项目目录} +yapi-cli unplugin yapi-plugin-demo +``` \ No newline at end of file diff --git a/doc/page/plugin/list.md b/doc/page/plugin/list.md new file mode 100644 index 00000000..aa5c84f0 --- /dev/null +++ b/doc/page/plugin/list.md @@ -0,0 +1,18 @@ +## 插件列表 + + + \ No newline at end of file diff --git a/server/controllers/interface.js b/server/controllers/interface.js index 0cdaa16f..d0245287 100644 --- a/server/controllers/interface.js +++ b/server/controllers/interface.js @@ -289,9 +289,11 @@ class interfaceController extends baseController { desc: 'string', catid: 'number' }); - - params.method = params.method || 'GET'; - params.method = params.method.toUpperCase(); + if (!_.isUndefined(params.method)) { + params.method = params.method || 'GET'; + params.method = params.method.toUpperCase(); + } + let id = ctx.request.body.id; diff --git a/static/doc/api.html b/static/doc/api.html index fe823edd..63498816 100644 --- a/static/doc/api.html +++ b/static/doc/api.html @@ -38,6 +38,11 @@ 内网部署 +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/case.html b/static/doc/case.html index 6fce506f..d8620b8b 100644 --- a/static/doc/case.html +++ b/static/doc/case.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/data.html b/static/doc/data.html index 62444ba7..b4c0a17f 100644 --- a/static/doc/data.html +++ b/static/doc/data.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/devops.html b/static/doc/devops.html index 255f551b..dc8e71b5 100644 --- a/static/doc/devops.html +++ b/static/doc/devops.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/getfamiliar.html b/static/doc/getfamiliar.html index cbe1cbb6..e7d67e14 100644 --- a/static/doc/getfamiliar.html +++ b/static/doc/getfamiliar.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/index.html b/static/doc/index.html index de4f8948..4676719c 100644 --- a/static/doc/index.html +++ b/static/doc/index.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/interface.html b/static/doc/interface.html index 662e8500..4e9366d3 100644 --- a/static/doc/interface.html +++ b/static/doc/interface.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/manage.html b/static/doc/manage.html index dcf9ac79..fd7edb4e 100644 --- a/static/doc/manage.html +++ b/static/doc/manage.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/mock.html b/static/doc/mock.html index a0beb810..88deae0c 100644 --- a/static/doc/mock.html +++ b/static/doc/mock.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/plugin-dev.html b/static/doc/plugin-dev.html new file mode 100644 index 00000000..a637c1c7 --- /dev/null +++ b/static/doc/plugin-dev.html @@ -0,0 +1,200 @@ + + + + + + + + + + + YApi 插件Wiki + + + + + + + + + +
    +
    +
    + + YMFE + + + +
    +
    + + + + + +
    +
    +
    +

    插件

    +

    可根据业务需求,定制化功能

    + +
    +
    + + +
    + +
    + + + + +
    + +

    运行开发服务器 #

    npm install
    +npm install -g ykit //依赖 ykit 
    +npm run dev
    +

    初始化目录 #

    可参考 项目vendors/exts 目录下的插件

    +

    在 vendors/node_modules 下新建 yapi-plugin-demo 目录和 npm init,最后生成的目录接口如下

    +
    yapi-plugin-demo
    +  client.js  //客户端入口文件
    +  server.js  //服务端入口文件
    +  packjson.json //插件依赖管理
    +  index.js //插件配置文件
    +

    index.js 配置说明 #

    server: true // 如果为true,表名该插件需要经过后端服务器加载
    +client: true // 如果为true,表名该插件需要经过前端编译
    +

    server.js #

    在server.js 需要导出一个 function ,例如: module.exports = function(options){}

    +

    options 可在 config.json 配置

    +

    绑定钩子 #

    this.bindHook(hookname, listener) //绑定钩子
    +hookname //钩子名
    +listener //监听函数,可以是普通函数,也可以是 asyncFunction
    +

    如何使用 YApi vendors/server 目录下的模块 #

    可以直接 require vendors 目录下的模块,注意:后端 node 不能使用 import关键字,只能使用 require +例如: require('yapi')

    +

    加载插件 #

    在config.json plugins配置项,加入 demo,例如:

    +
    {
    +  ...
    +  plugins: {
    +    name: 'demo'
    +  }
    +}
    +

    controller 和 model #

    新增 controller 需要继承 baseController(controller/base.js)

    +

    新增 model 需要继承 baseModel(model/base.js)

    +

    client.js #

    绑定钩子(同后端 server.js ) #

    this.bindHook(hookname, listener) //绑定钩子
    +hookname //钩子名
    +listener //监听函数,可以是普通函数,也可以是 asyncFunction
    +
    +
    +
    + +
    + +
    + +
    + +
    +
    + + +
    +
    + + + + + + + + + diff --git a/static/doc/plugin-hooks.html b/static/doc/plugin-hooks.html new file mode 100644 index 00000000..135ec82a --- /dev/null +++ b/static/doc/plugin-hooks.html @@ -0,0 +1,315 @@ + + + + + + + + + + + YApi 插件Wiki + + + + + + + + + +
    +
    +
    + + YMFE + + + +
    +
    + + + + + +
    +
    +
    +

    插件

    +

    可根据业务需求,定制化功能

    + +
    +
    + + +
    + +
    + + + + +
    + +

    后端 hookList #

    目前 hooksList 只有下面列出的部分,如果您有其他的需求,可提建议到 github 或者 qq群

    +
    /**
    + * 钩子配置
    + */
    +var hooks = {
    +    /**
    +     * 第三方sso登录钩子,暂只支持设置一个
    +     * @param ctx 
    +     */
    +    'third_login': {
    +        type: 'single',
    +        listener: null
    +    },
    +    /**
    +     * 客户端增加接口成功后触发
    +     * @param id 接口id
    +     */
    +    'interface_add': {
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +     * 客户端删除接口成功后触发
    +     * @param id 接口id
    +     */
    +    'interface_del': {
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +    * 客户端更新接口成功后触发
    +    * @param id 接口id
    +    */
    +    'interface_update':{
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +     * 客户端获取接口数据列表
    +     * @param id project_id
    +     */
    +    'interface_list':{
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +     * 客户端获取一条接口信息触发
    +     * @param id 接口id
    +     */
    +    'interface_get':{
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +     * 客户端增加一个新项目
    +     * @param id 项目id
    +     */
    +    'project_add':{
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +     * 客户端删除删除一个项目
    +     * @param id 项目id
    +     */
    +    'project_del':{
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +     * MockServer生成mock数据后触发
    +     * @param context Object
    +     * {
    +     *  projectData: project,
    +        interfaceData: interfaceData,
    +        ctx: ctx,
    +        mockJson: res 
    +     * }
    +     * 
    +     */
    +    mock_after: {
    +        type: 'multi',
    +        listener: []
    +    },
    +    /**
    +     * 增加路由的钩子
    +     * type Sync
    +     * @param addPluginRouter Function 
    +     * addPLuginPLugin(config)
    +     * config = {
    +     *  path,      // String
    +     *  method,    // String
    +     *  controller // Class 继承baseController的class
    +     *  action     // String controller的Action
    +     * }
    +     */
    +    add_router: {
    +        type: 'multi',
    +        listener: []
    +    }
    +};
    +

    前端 hookList #

    /**
    + * type component  组件
    + *      listener   监听函数
    + * mulit 是否绑定多个监听函数
    + *      
    + */
    +
    +hooks = {
    +  /**
    +   * 第三方登录 //可参考 yapi-plugin-qsso 插件
    +   */
    +  third_login: {
    +    type: 'component',
    +    mulit: false,
    +    listener: null
    +  },
    +  /**
    +   * 导入数据
    +   * @param importDataModule
    +   * 
    +   * @info
    +   * 可参考 vendors/exts/yapi-plugin-import-swagger插件
    +   * importDataModule = {}; 
    +   * 
    +   */
    +  import_data: {
    +    type: 'listener',
    +    mulit: true,
    +    listener: []
    +  },
    +  /**
    +   * 接口页面 tab 钩子
    +   * @param InterfaceTabs
    +   * 
    +   * @info
    +   * 可参考 vendors/exts/yapi-plugin-advanced-mock
    +   * let InterfaceTabs = {
    +      view: {
    +        component: View,
    +        name: '预览'
    +      },
    +      edit: {
    +        component: Edit,
    +        name: '编辑'
    +      },
    +      run: {
    +        component: Run,
    +        name: '运行'
    +      }
    +    }
    +   */
    +  interface_tab: {
    +    type: 'listener',
    +    mulit: true,
    +    listener: []
    +  }
    +};
    +
    +
    +
    + +
    + +
    + +
    + +
    +
    + + +
    +
    + + + + + + + + + diff --git a/static/doc/plugin-index.html b/static/doc/plugin-index.html new file mode 100644 index 00000000..e8b4835c --- /dev/null +++ b/static/doc/plugin-index.html @@ -0,0 +1,163 @@ + + + + + + + + + + + YApi 插件Wiki + + + + + + + + + +
    +
    +
    + + YMFE + + + +
    +
    + + + + + +
    +
    +
    +

    插件

    +

    可根据业务需求,定制化功能

    + +
    +
    + + +
    + +
    + + + + +
    + +

    安装 #

    假设插件名为:yapi-plugin-demo,安装方法如下:

    +
    cd {项目目录}
    +yapi-cli plugin yapi-plugin-demo
    +

    卸载插件 #

    假设插件名为:yapi-plugin-demo,卸载方法如下:

    +
    cd {项目目录}
    +yapi-cli unplugin yapi-plugin-demo
    +
    +
    +
    + +
    + +
    + +
    + +
    +
    + + +
    +
    + + + + + + + + + diff --git a/static/doc/plugin-list.html b/static/doc/plugin-list.html new file mode 100644 index 00000000..49dd1269 --- /dev/null +++ b/static/doc/plugin-list.html @@ -0,0 +1,169 @@ + + + + + + + + + + + YApi 插件Wiki + + + + + + + + + +
    +
    +
    + + YMFE + + + +
    +
    + + + + + +
    +
    +
    +

    插件

    +

    可根据业务需求,定制化功能

    + +
    +
    + + +
    + +
    + + + + +
    + +

    插件列表 #

      + +
    + + +
    +
    + +
    + +
    + +
    + +
    +
    + + +
    +
    + + + + + + + + + diff --git a/static/doc/plugin.html b/static/doc/plugin.html new file mode 100644 index 00000000..1b13941a --- /dev/null +++ b/static/doc/plugin.html @@ -0,0 +1,151 @@ + + + + + + + + + + + YApi 插件Wiki + + + + + + + + + +
    +
    +
    + + YMFE + + + +
    +
    + + + + + +
    +
    +
    +

    插件

    +

    可根据业务需求,定制化功能

    + +
    +
    + + +
    + +
    + + + + +
    + +

    安装 #

    假设插件名为:yapi-plugin-demo,安装方法如下:

    +
    cd {项目目录}
    +yapi-cli plugin yapi-plugin-demo
    +

    卸载插件 #

    假设插件名为:yapi-plugin-demo,卸载方法如下:

    +
    cd {项目目录}
    +yapi-cli unplugin yapi-plugin-demo
    +
    +
    +
    + +
    + +
    + +
    + +
    +
    + + +
    +
    + + + + + + + + + diff --git a/static/doc/project.html b/static/doc/project.html index 55ed11a5..772b1e40 100644 --- a/static/doc/project.html +++ b/static/doc/project.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/qa.html b/static/doc/qa.html index d7d08ff8..84f48c50 100644 --- a/static/doc/qa.html +++ b/static/doc/qa.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/quickstart.html b/static/doc/quickstart.html index 77c65670..c7630bf1 100644 --- a/static/doc/quickstart.html +++ b/static/doc/quickstart.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/static/doc/releases.html b/static/doc/releases.html index 0fce7819..4165c728 100644 --- a/static/doc/releases.html +++ b/static/doc/releases.html @@ -38,6 +38,11 @@ 内网部署
  • +
  • + + 插件Wiki +
  • +
  • 版本记录 diff --git a/ydoc.json b/ydoc.json index 1f4aa2a6..01bd7983 100644 --- a/ydoc.json +++ b/ydoc.json @@ -104,6 +104,37 @@ "compile": "markdown", "menuLevel": 2, "content": "./doc/page/manage/build.md" + }, + { + "name": "plugin", + "title": "插件Wiki", + "banner": { + "title": "插件", + "description": "可根据业务需求,定制化功能" + }, + "content": { + "sidebar": true, + "multi": true, + "index": "./doc/page/plugin/index.md", + "pages": [{ + "name": "插件管理", + "index": "plugin-index", + "content": "./doc/page/plugin/index.md" + },{ + "name": "插件开发", + "index": "plugin-dev", + "content": "./doc/page/plugin/dev.md" + },{ + "name": "钩子列表", + "index": "plugin-hooks", + "content": "./doc/page/plugin/hooks.md" + },{ + "name": "插件列表", + "index": "plugin-list", + "content": "./doc/page/plugin/list.md" + } + ] + } }, { "name": "releases",