前言
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的使用的更多相关文章

  1. JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)

    需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...

  2. Chrome Dev Tools :成为更高效的开发人员

    原文出处 http://blog.jobbole.com/22065/ 实时CSS Style编辑 选择一个Dom,可以对Dom进行编辑和操作,实时修改Css Style, 同时CssStyle可以保 ...

  3. xfce4 dev tools的一些说明

    xfce4 dev tools实际上基本是封装了一些autoconf的宏函数 比如XDT_I18N: AC_DEFUN([XDT_I18N], [ dnl Substitute GETTEXT_PAC ...

  4. 谷歌浏览器 DEV Tools

    谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chrome变成了一个必须的工具.大多数可能熟悉关于chorme的许多特点,例如使用c ...

  5. chrome dev tools

    chrome dev tools介绍一下Chrome dev tools 的基本使用和一些意想不到的小技巧.\\Chrome Developer Tools 是Chrome内嵌的一系列编辑和调试的工具 ...

  6. 15个你不得不知道的Chrome dev tools的小技巧

    转载自:https://www.imooc.com/article/2559 谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chro ...

  7. kibana dev tools快捷键

    kibana dev tools快捷键 ctrl+enter  提交请求 ctrl+i 自动缩进 ctrl+enter 提交请求 down 打开自动补全菜单 enter或tab 选中项自动补全 esc ...

  8. [D3] Debug D3 v4 with Dev Tools

    Since D3 outputs standard markup, you can use familiar dev tools and inspectors to debug your visual ...

  9. 第十五章·Kibana深入-Dev Tools及Lucene语法

    Dev Tools介绍 Dev Tools 页面包含开发工具,您可以使用这些Dev Tools与Kibana中的数据进行交互. 原先的交互式控制台Sense,使用户方便的通过浏览器直接与Elastic ...

  10. 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析

    背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...

随机推荐

  1. addAll(Collection<? extends E> c)的方法源码

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...

  2. zookeeper选主机制

    Zookeeper选主机制 一.Server工作状态 每个Server在工作过程中有四种状态: LOOKING:竞选状态,当前Server不知道leader是谁,正在搜寻. LEADING:领导者状态 ...

  3. 大模型微调实战:通过 LoRA 微调修改模型自我认知

    本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知. 本文的一个目的:基于 Qwen1.5-1.8B- ...

  4. Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板

    2025跨平台ai实战electron35+vite6+arco仿DeepSeek/豆包ai流式打字聊天助手. electron-deepseek-chat:实战ai大模型对话,基于vue3.5+el ...

  5. 搞定 XLSX 预览?别瞎找了,这几个库(尤其最后一个)真香!

    -   Hey, 我是 沉浸式趣谈 -   本文首发于[沉浸式趣谈],我的个人博客 **https://yaolifeng.com** 也同步更新. -   转载请在文章开头注明出处和版权信息. - ...

  6. CTF实验吧认真一点 SQL盲注

    实验吧地址 http://ctf5.shiyanbar.com/web/earnest/index.php 很明显的返回两个不同得页面,判断为SQL盲注 并且 过滤了敏感字符 测试的时候还发现过滤了s ...

  7. 解决 Dify 部署中 Podman WSL 容器文件权限问题

    解决 Dify 部署中 Podman WSL 容器文件权限问题 在使用 Podman 进行 Dify 部署时,遇到了一个关键问题:启动服务时出现 initdb: error: could not ch ...

  8. struts2——Action的三种编写方式

    Action有三种编写方式POJO方式.实现Action接口.继承ActionSupport类 推荐采用继承ActionSupport类这种方式.因为这个类的功能比较丰富. 方式一:POJO方式 pa ...

  9. 【工具】JS脚本|网页任意视频倍速播放(包括MOOC、本地视频、其他的视频)

    实际发布时间:2022-12-14 22:54:52. csdn禁止浏览器脚本相关博客了,就只能重新发到这儿了. 2024/12/14更新:更新了常见问题Q&A,可以配合食用.   只要浏览器 ...

  10. centos6分区要点

    安装centos6系统时,为了以后能够扩展存储,分区时要注意几点: 1.boot引导分区要选固定分区类型存储,大小是500M 2.其余分区全部做成物理卷lvm  pyshiic类型存储 3.在这个物理 ...