aegis-dev-tools的使用
前言
aegis-dev-tools是一个辅助开发前端的工具包,用于根据后端接口文档生成前端封装api请求。
创建后端项目
要求使用swagger,且controler书写规范,输入输出类型,备注都要 合理,比如
package com.dshvv.myblogserver.controller; import com.dshvv.myblogserver.model.entity.Teacher;
import com.dshvv.myblogserver.utils.JsonResult;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; @RestController
@RequestMapping("/teacher")
public class TeacherController { @ApiOperation(value = "添加老师", notes = "添加老师的接口", produces = "application/json")
@PostMapping
public JsonResult save(Teacher teacher) {
return JsonResult.success();
} @ApiOperation(value = "获取老师", notes = "获取老师的接口", produces = "application/json")
@GetMapping(path = "/{id}")
public JsonResult get(@PathVariable int id) {
Teacher t1 = new Teacher();
t1.setId(202001);
t1.setName("丁老师");
t1.setAge(20);
return JsonResult.success(t1);
} @ApiOperation(value = "获取老师列表", notes = "获取老师列表的接口", produces = "application/json")
@GetMapping()
public JsonResult list() {
Teacher t1 = new Teacher();
t1.setId(202001);
t1.setName("丁老师");
t1.setAge(20);
ArrayList teachers = new ArrayList();
teachers.add(t1);
return JsonResult.success(teachers);
} @ApiOperation(value = "删除老师", notes = "删除老师的接口", produces = "application/json")
@DeleteMapping
public JsonResult delete(int id) {
return JsonResult.success();
} }
package com.dshvv.myblogserver.controller; import com.dshvv.myblogserver.model.entity.Teacher;
import com.dshvv.myblogserver.utils.JsonResult;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap; @RequestMapping
@RestController
public class OtherController { @ApiOperation(value = "后端服务起始页", notes = "用于用查看后端服务是否启动", produces = "text/html")
@GetMapping("/")
public ModelAndView Home() {
return new ModelAndView("home");
} @ApiOperation(value = "测试接口", notes = "用于测试后台是否可被访问", produces = "application/json")
@GetMapping("/test")
public JsonResult test() {
return JsonResult.success();
}
}
创建前端项目
要求用ts创建vue项目
vue create vuetseg
开始使用
前端依赖依赖包
npm install aegis-api-proxy aegis-dev-tools
推荐aegis-api-proxy使用0.0.6版本,高版本有问题
根目录增加配置文件api.config.js
module.exports = {
templates: {},
configs: [{
url: 'http://localhost:7777/v2/api-docs', // 后端swagger地址
typeParameterReflects: [{
name: 'KeyValue',
typeProperties: ['key', 'value']
}, {
name: 'JsonResult',
typeProperties: ['data']
}, {
name: 'Page',
typeProperties: ['content']
}, {
name: 'SimplePage',
typeProperties: ['list']
}, {
name: 'Pair',
typeProperties: ['first', 'second']
}, {
name: 'RequestValues',
typeProperties: ['data']
}]
}],
typesAsAny: ['JSONArray', 'Serializable', 'JSONObject'],
unwrapTypes: ['Response', 'ResponseSimpleEnum', 'JsonResult']
};
新增文件夹
根目录下,新增文件夹api、types
生成代码
packge.json的script增加如下代码
"api": "generate-api"
打开终端,执行
npm run api
此时,打开api、types两个文件夹,即可发现接口以及接口所需的类型文件都已经生成
但是此时还是不能使用,仍然需要继续配置
配置使用
如上,单纯的生成是不能使用的,还需要额外的配置
新增一个配置文件,config\apibase.config.ts。当然在任意位置和文件名,无特定要求
然后内容如下
import {Global} from 'aegis-api-proxy';
import apiObj from './api-definition';
// ajax请求的基本配置
const config = {
pathSuffix: '',
basePath: 'http://localhost:7777',
httpStatusErrorHandler: () => {
return true;
},
logicErrorHandler: () => {
return true;
}
};
export default Global.proxyAPI(apiObj, config, {
headers: {common: {}}
});
将此文件引入main.js中
import './config/apibase.config'
自此,已经全部配置准备完毕
然后还要新增全局类型文件(用于扩展自己自定义的api定义)
src\types\api.d.ts
import {GeneratedApis} from './api-definition';
declare module'aegis-api-proxy' {
// import {GenericAPI} from 'aegis-api-proxy';
interface ApiObject<T> extends GeneratedApis<T> {
// aaa: GenericAPI<any>;
}
}
测试验证
app.vue修改如下
<template>
<div class="app">
<button @click="test">测试</button>
</div>
</template> <script lang="ts">
import {Component, Vue} from 'vue-property-decorator'; @Component
export default class HelloWorld extends Vue {
private async test() {
const res: any = await this.$api.teacher.get.requestData(1);
console.log(res);
}
}
</script>

其他
react的使用
react使用的时候,请修改配置如下
I think this plug-in works very well because it doesn't have to encapsulate HTTP requests by itself, and it also has type files.
Vue can be used directly, but React or Angular needs some extra work.
First, enter the plug-in root directory, "aegis-dev-tools/"
create profile tsconfig.json
{
"compilerOptions": {
"outDir": "./dist",
"target": "es5",
"module": "commonjs",
"lib": [
"es5",
"es2016.array.include",
"dom"
],
"strict": true,
"esModuleInterop": true
}
}
Then execute the tsc command
After the dist content is generated, go to dist\global\ index.js In the directory, comment out the Vue related code, and the modified version is as follows:
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var api_proxy_1 = __importDefault(require("../api-proxy"));
var axios_1 = __importDefault(require("axios"));
// var vue_1 = __importDefault(require("vue"));
var apiProxy = function (apiObject, config, axiosConfig) {
axios_1.default.defaults.baseURL = config.basePath;
var apiProxy = api_proxy_1.default(apiObject, config, axiosConfig || { url: null });
// var plugin = {
// installed: false,
// install: function (vue) {
// if (plugin.installed) {
// return;
// }
// if (!vue.prototype.$api) {
// Object.defineProperties(vue.prototype, {
// $api: {
// get: function () {
// return apiProxy;
// }
// }
// });
// }
// }
// };
// vue_1.default.use(plugin);
return apiProxy;
};
exports.default = {
proxyAPI: apiProxy
};
At last packge.json Revision of export documents
"main": "dist/index.js",
demo:
import React,{useState, useEffect} from 'react';
import style from './style.less';
import api from '@/api/apibase-config'
export default (props: any)=> {
useEffect(()=>{
courtrealdata();
},[]);
const courtrealdata = async ()=>{
const res = await api.api.real.v2.courtrealdata.courtRealData.req();
console.log(res)
}
return (
<div className={style.Home}>
123
</div>
);
};
如果不想如上修改,或可以直接安装我修改二次封装过的包
npm install git+https://gitee.com/dshvv/aegis-api-proxy.git
aegis-dev-tools的使用的更多相关文章
- JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)
需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...
- Chrome Dev Tools :成为更高效的开发人员
原文出处 http://blog.jobbole.com/22065/ 实时CSS Style编辑 选择一个Dom,可以对Dom进行编辑和操作,实时修改Css Style, 同时CssStyle可以保 ...
- xfce4 dev tools的一些说明
xfce4 dev tools实际上基本是封装了一些autoconf的宏函数 比如XDT_I18N: AC_DEFUN([XDT_I18N], [ dnl Substitute GETTEXT_PAC ...
- 谷歌浏览器 DEV Tools
谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chrome变成了一个必须的工具.大多数可能熟悉关于chorme的许多特点,例如使用c ...
- chrome dev tools
chrome dev tools介绍一下Chrome dev tools 的基本使用和一些意想不到的小技巧.\\Chrome Developer Tools 是Chrome内嵌的一系列编辑和调试的工具 ...
- 15个你不得不知道的Chrome dev tools的小技巧
转载自:https://www.imooc.com/article/2559 谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chro ...
- kibana dev tools快捷键
kibana dev tools快捷键 ctrl+enter 提交请求 ctrl+i 自动缩进 ctrl+enter 提交请求 down 打开自动补全菜单 enter或tab 选中项自动补全 esc ...
- [D3] Debug D3 v4 with Dev Tools
Since D3 outputs standard markup, you can use familiar dev tools and inspectors to debug your visual ...
- 第十五章·Kibana深入-Dev Tools及Lucene语法
Dev Tools介绍 Dev Tools 页面包含开发工具,您可以使用这些Dev Tools与Kibana中的数据进行交互. 原先的交互式控制台Sense,使用户方便的通过浏览器直接与Elastic ...
- 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析
背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...
随机推荐
- Codeforces Round 944 (Div. 4)
知识点模块 1. ai xor aj<=4 意味着两个数字的二进制位,只能有后两位的二进制位不同,因为如果第三位二进制位不同,就会出现异或的结果大于4 2.要有化曲为直的思想 学会把曲线上的坐标 ...
- 麒麟V10部署ROCEv2网卡配置步骤
以下是为麒麟服务器版V10配置RoCEv2的步骤: 第一步:确认硬件和驱动支持 在开始配置之前,首先要确保你的服务器硬件满足要求.通常需要Mellanox ConnectX系列网卡(例如mlx5系列) ...
- 详细介绍Java的SPI机制
一.什么是SPI机制 SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.s ...
- AnnotationAwareAspectJAutoProxyCreator后置处理器的BeanDefinition定义信息导入和其对象实例创建过程
步骤1 我们从配置类上的@EnableAspectJAutoProxy 注解入手,进入发现这个注解上又有一个@Import(AspectJAutoProxyRegistrar.class)注解, 了解 ...
- 12.ZIP伪加密
题目是伪加密,打开压缩包,发现里面直接放着flag.txt,但是好像需要输入密码,此时我们在不看题目的第一反应就是破解,但是无果,看了别人的wp之后,了解了一点伪加密. ZIP文件分为:压缩源文件数据 ...
- wordpress插件开发时如何通过js调用图库/媒体选择器的问题
效果: 原文地址: wordpress插件开发通过js调用图库/媒体选择器的问题 - 搜栈网 (seekstack.cn)
- sonarqube+gitlab+jenkins+maven集成搭建(三)
安装JENKINS 关闭防火墙[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable fir ...
- Vue初体验——Hello Word
Vue文本插值 资料:来自Vue的官网 核心思想 Vue.js核心: 用简洁的模板语法 声明式地将数据渲染进 DOM 的系统 <!DOCTYPE html> <html> &l ...
- wso2~介绍
1. Wso2-apim的介绍 WSO2 API Manager 是一个开源的 API 管理解决方案,旨在帮助组织设计.发布.管理和分析 API.它提供了全面的功能,支持企业在现代应用程序开发中实现更 ...
- 王炸!SpringBoot+MCP 让你的系统秒变AI小助手
王炸!SpringBoot+MCP 让你的系统秒变AI小助手 感觉本篇对你有帮助可以关注一下我的微信公众号(深入浅出谈java),会不定期更新知识和面试资料.技巧!!! 一.MCP 是什么? MCP( ...