From a1d82020ed6b1346b36b2780576ff5677866b7fa Mon Sep 17 00:00:00 2001 From: uctoo Date: Wed, 28 Jul 2021 15:29:26 +0800 Subject: [PATCH] add apimanager module catch-admin-vue files and README doc --- catch/apimanager/README.md | 95 ++ catch/apimanager/catch-admin-vue/package.json | 116 +++ .../catch-admin-vue/src/api/userenv.js | 7 + catch/apimanager/catch-admin-vue/src/main.js | 48 ++ .../views/apimanager/apicategory/index.vue | 44 + .../src/views/apimanager/apienv/index.vue | 270 ++++++ .../src/views/apimanager/apirun/index.vue | 659 ++++++++++++++ .../src/views/apimanager/apirun/itemBtn.vue | 114 +++ .../src/views/apimanager/apitester/index.vue | 816 ++++++++++++++++++ .../src/views/apimanager/router.js | 8 + 10 files changed, 2177 insertions(+) create mode 100644 catch/apimanager/README.md create mode 100644 catch/apimanager/catch-admin-vue/package.json create mode 100644 catch/apimanager/catch-admin-vue/src/api/userenv.js create mode 100644 catch/apimanager/catch-admin-vue/src/main.js create mode 100644 catch/apimanager/catch-admin-vue/src/views/apimanager/apicategory/index.vue create mode 100644 catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue create mode 100644 catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue create mode 100644 catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/itemBtn.vue create mode 100644 catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue create mode 100644 catch/apimanager/catch-admin-vue/src/views/apimanager/router.js diff --git a/catch/apimanager/README.md b/catch/apimanager/README.md new file mode 100644 index 0000000..59a4f0f --- /dev/null +++ b/catch/apimanager/README.md @@ -0,0 +1,95 @@ +apitester 模块是一个用于API管理、测试的模块。 + +# 概述 + + 本模块的设计目标是提供开发人员、产品人员等相关角色,可以管理和测试API,可以将系统内部或外部API信息保存在系统内,使得产品具有自完备的特性和持续交付的特性,并可进行灵活的二次开发。 + +## 主要特性 + +1. 支持API分类管理,支持自定义用户环境变量,支持API测试用例管理。 +2. 支持HTTP、HTTPS接口测试用例的在线运行。(更多协议支持规划在模块roadmap中) +3. 支持接口文档管理。 +4. 已集成微信第三方平台相关接口测试用例,开发者可快速进行第三方平台应用开发。 +5. 支持多帐号多应用使用环境,易于团队协作,不限制接口数量、用户数量、请求数量。 +6. 基于catchadmin开发,模块安装简单,使用便捷,支持模块数据导入导出。 +7. 开源开放易于二次开发,测试用例可共享,形成产品API知识库。 +8. 支持私有化部署、云原生部署。 + + 演示地址:www.uctoo.com 控制台使用demo帐号登录 + 模块使用界面截图: + + + + + + + + + + + + + + + + + + + + + + +
+ +## 产品架构 +1. 基于catchadmin标准模块开发方式开发,可在管理后台一键安装模块和初始化模块数据。 +2. 前端采用axios技术选型,前端可形成标准客户端接口库。 +3. 本地接口(数据源类型local)主要沿用catchadmin基于用户身份的接口鉴权方案,需在API测试用例header添加authorization参数,其值为登录接口返回的值。 +4. 在扫码登录后注册用户帐号接口测试用例,演示了采用微信扫码登录后获取到的用户access_token进行接口鉴权的示例。 +5. 微信相关开发使用了[uctoo/think-easywechat SDK](https://gitee.com/UCT/think-easywechat) 集成catchadmin (TP6+VUE) 和 easywechat 4,支持微信第三方平台、微信小程序云开发、微信支付服务商等特性。 + +## 安装教程 + +### 运行环境依赖 + + PHP >= 7.1.0 + Mysql >= 5.5.0 (需支持innodb引擎) + PDO PHP Extension + MBstring PHP Extension + CURL PHP Extension + ZIP Extension + Composer + catchadmin + +### 分步骤安装 +1. 从https://gitee.com/jaguarjack/catchAdmin 或 https://gitee.com/uctoo/uctoo 下载https://gitee.com/uctoo/uctoo/tree/master/catch/apimanager 目录模块,复制到catchadmin对应目录 +2. apimanager/catch-admin-vue 目录内是模块前端vue项目代码,复制到前端VUE项目对应目录,注意如和原前端vue项目目录的文件有冲突,需自行合并代码版本。如模块新依赖了第三方组件,需要在前端项目目录重新运行 yarn install 命令。 +3. 登录管理后台,在系统管理->模块管理启用API管理模块,即可安装模块和初始化模块数据。 + +### 云原生安装 +1. 可在 https://www.uctoo.com 注册开发者帐号,登录管理后台,通过云开发功能模块,即可采用云原生方式开通和部署一套独立的UCToo运行实例。(开发中) + +### docker安装 + 可参考uctoo-docker项目 https://gitee.com/UCT/uctoo-docker + +## 使用手册 +1. 可以通过API管理->API分类功能增删改查API分类。 +2. 可以通过API环境变量功能增删改查用户环境变量。环境变量的key值以{{key}}方式定义,在API测试用例中对应的{{key}}值将替换为环境变量的value值。每个用户可以创建多组环境变量,可以切换当前选中的环境变量组。 +3. 可以通过API列表功能增删改查API测试用例。api_url、header、body、query、auth字段支持环境变量。 +4. 可以对已添加的API测试用例执行测试操作,在API测试界面,可以对api_url、header、body、query、auth等字段进行自定义编辑。发送按钮可以实际执行API测试用例,获得接口返回值。 + + 具体请参考 https://www.kancloud.cn/doc_uctoo/manual + +## 开发说明 +### 模块roadmap + +1. 通过解析路由文件router.php中的数据,自动生成系统接口(system类型)的所有测试用例。即实现系统接口的可视化测试。 +2. 实现API管理功能,即可通过界面配置进行基于appid的接口权限管理,OAUTH2接口鉴权方案。 +3. 实现API测试用例中API文档字段支持markdown编辑和展示。 +4. 实现除POST、GET、PUT、DELETE之外的其他接口请求方式。 +5. 实现全部content-type类型的支持。 +6. 实现测试数据的保存、历史记录等功能。 +7. 实现notify类型接口的测试,目前还没有在市面上见过类似功能的产品,但是实际开发中notify类型的接口在微信第三方平台、各种支付回调、硬件数据上传等很多场景都有遇到。 +8. 实现API测试用例的公开(共享)、私有、保护(有偿获取)等特性。 + + 具体请参考开源版开发手册 https://www.kancloud.cn/doc_uctoo/uctoo_dev 及 本开源项目示例 \ No newline at end of file diff --git a/catch/apimanager/catch-admin-vue/package.json b/catch/apimanager/catch-admin-vue/package.json new file mode 100644 index 0000000..37d0ef3 --- /dev/null +++ b/catch/apimanager/catch-admin-vue/package.json @@ -0,0 +1,116 @@ +{ + "name": "catch-admin", + "version": "4.4.0", + "description": "catch-admin manage system on element-admin-vue", + "author": "JaguarJack ", + "scripts": { + "dev": "vue-cli-service serve", + "lint": "eslint --ext .js,.vue src", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "new": "plop", + "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "test:ci": "npm run lint && npm run test:unit" + }, + "dependencies": { + "@form-create/element-ui": "^2.5.4", + "axios": "0.18.1", + "clipboard": "2.0.4", + "codemirror": "5.45.0", + "core-js": "3.6.5", + "driver.js": "0.9.5", + "dropzone": "5.5.1", + "echarts": "4.2.1", + "element-ui": "2.13.2", + "file-saver": "2.0.1", + "fuse.js": "3.4.4", + "js-cookie": "2.2.0", + "jsonlint": "1.6.3", + "jszip": "3.2.1", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path-to-regexp": "2.4.0", + "screenfull": "4.2.0", + "script-loader": "0.7.2", + "sortablejs": "1.8.4", + "vue": "2.6.10", + "vue-count-to": "1.0.13", + "vue-highlightjs": "^1.3.3", + "vue-router": "3.0.2", + "vue-splitpane": "1.0.4", + "vuedraggable": "2.20.0", + "vuex": "3.1.0", + "xlsx": "0.14.1" + }, + "devDependencies": { + "@smallwei/avue": "^2.8.17", + "@vue/cli-plugin-babel": "4.4.4", + "@vue/cli-plugin-eslint": "4.4.4", + "@vue/cli-plugin-unit-jest": "4.4.4", + "@vue/cli-service": "4.4.4", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "9.5.1", + "babel-eslint": "10.1.0", + "babel-jest": "^26.3.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "chalk": "2.4.2", + "chokidar": "2.1.5", + "connect": "3.6.6", + "eslint": "6.7.2", + "eslint-plugin-vue": "6.2.2", + "highlight.js": "^10.2.0", + "html-webpack-plugin": "3.2.0", + "husky": "1.3.1", + "lint-staged": "8.1.5", + "lodash": "^4.17.20", + "mockjs": "1.0.1-beta3", + "plop": "2.3.0", + "runjs": "4.3.2", + "sass": "1.26.2", + "sass-loader": "8.0.2", + "script-ext-html-webpack-plugin": "2.1.3", + "serve-static": "1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.0", + "vue-highlight.js": "^3.1.0", + "vue-json-editor": "^1.4.3", + "vue-json-views": "^1.3.0", + "vue-template-compiler": "2.6.10" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ], + "bugs": { + "url": "https://github.com/JaguarJack/catch-admin-vue/issues" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "license": "MIT", + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "husky": { + "hooks": {} + }, + "repository": { + "type": "git", + "url": "git+https://github.com/JaguarJack/catch-admin-vue" + } +} diff --git a/catch/apimanager/catch-admin-vue/src/api/userenv.js b/catch/apimanager/catch-admin-vue/src/api/userenv.js new file mode 100644 index 0000000..0679ef0 --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/api/userenv.js @@ -0,0 +1,7 @@ +import request from "@/utils/request"; +export function userenvList() { + return request({ + url: "/apiTesterUserenv", + method: "get" + }); +} diff --git a/catch/apimanager/catch-admin-vue/src/main.js b/catch/apimanager/catch-admin-vue/src/main.js new file mode 100644 index 0000000..30784ad --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/main.js @@ -0,0 +1,48 @@ +import Vue from 'vue' + +import 'normalize.css/normalize.css' // a modern alternative to CSS resets + +import Element from 'element-ui' +import Avue from '@smallwei/avue' +import 'element-ui/lib/theme-chalk/index.css' +import './styles/element-variables.scss' + +// import enLang from 'element-ui/lib/locale/lang/en'// 如果使用中文语言包请默认支持,无需额外引入,请删除该依赖 + +import '@/styles/index.scss' // global css + +import App from './App' +import store from './store' +import router from './router' + +import './icons' // icon +import './permission' // permission control +import './utils/error-log' // error log +import request from '@/utils/request' +import * as filters from './filters' // global filters +import catchAdmin from '@/components/Catch' + +Vue.use(Element, { + size: 'small'// set element-ui default size + // locale: enLang // 如果使用中文,无需设置,请删除 +}) +window.axios = request; +Vue.use(Avue, { request }); +// register global utility filters +Object.keys(filters).forEach(key => { + Vue.filter(key, filters[key]) +}) + +// 后台启动 +catchAdmin.boot() + +Vue.config.productionTip = false +Vue.prototype.$http = request +Vue.prototype.admin = catchAdmin + +new Vue({ + el: '#app', + router, + store, + render: h => h(App) +}) diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apicategory/index.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apicategory/index.vue new file mode 100644 index 0000000..54ce67f --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apicategory/index.vue @@ -0,0 +1,44 @@ + + + diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue new file mode 100644 index 0000000..f80a3d0 --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue @@ -0,0 +1,270 @@ + + diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue new file mode 100644 index 0000000..addbf8a --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue @@ -0,0 +1,659 @@ + + + + diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/itemBtn.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/itemBtn.vue new file mode 100644 index 0000000..29f45d1 --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/itemBtn.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue new file mode 100644 index 0000000..e1a8153 --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue @@ -0,0 +1,816 @@ + + + diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/router.js b/catch/apimanager/catch-admin-vue/src/views/apimanager/router.js new file mode 100644 index 0000000..554a808 --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/router.js @@ -0,0 +1,8 @@ +export default { + // api分类 + apicategory: () => import('@/views/apimanager/apicategory'), + // api测试 + apitester: () => import('@/views/apimanager/apitester'), + apirun: () => import('@/views/apimanager/apirun'), + apienv: () => import('@/views/apimanager/apienv') +}