详细指南
# 技术选型
# 前端
界面设计
相关技术
Vite
Typescript
Vue3
Element-Ui
Axios
Vue-Router
Vuex
Echarts
CodeMirror
# 后端
SpringBoot
MyBatis-Plus
MySQL
EasyExcel
FreeMarker
SpringCloud-Gateway
SpringCloud-Nacos
Dubbo
Redis
Docker
RabbitMQ
Netty
WebSocket
MinIO
Elastic Stack
Sentinel
JMeter压力测试
# 业务设计
# 部分功能
- 支持从业务线级别到项目级别的上线接口测试,供个人或集体使用,提供本地部署以及线上快速导入解决方案
- 支持多种形式导入接口,支持生成多种类型相应数据(Json,text...),支持多种类型接口文档导出(word,markdown,txt...)
- 支持上线公用接口,提供sdk一站式上线服务,并提供接口鉴权,流量计费,完备限流降级策略,API告警监控及日志记录等功能
- 支持mock数据测试及测试记录保存
- 支持项目级的用户权限管理
- 提供实时交流模块
# 服务模块
公共模块
为各模块提供公共服务支持,包括但不限于全局异常处理,基本工具类,公共自定义注解。并作为“中转站”聚合服务之间暴露的公共service。
1
社区服务
暂时提供发文交流,点赞收藏评论等基础社区服务
1
用户服务
为用户提供全局唯一的AccessKey与SecretKey,从而保证核心功能接口操作的安全性。同时使用SimHash算法与爬虫技术为用户提供智能匹配相似用户服务与其他推荐服务。提供关注功能。
1
接口服务
提供功能:业务线管理、业务线成员管理、项目管理、模块管理、BUG管理、接口管理、接口版本管理、接口拷贝、接口导入、接口文档pdf下载、接口mock、模块加密访问、接口在线调试、接口测试记录、数据字典管理、数据字典加密访问多管理员、多权限、自定义菜单、自定义网站样式、文档留言、错误码管理、接口排序、DOC、PDF、TEXT、EXCEL等资源管理、支持版本号控制、文档内容检索、操作日志记录、根据日志恢复数据、markdown编辑器、kindeditor编辑器、angularjs编辑器...
1
通讯服务
支持用户实时对话与离线对话推送功能,支持业务线级别的在线对话。
1
Client
自定义SDK,支持用户maven引入依赖,仅需使用SDK注解便可开放本项目服务接口。全程基于 netty 使用https向 server 进行连接与传输。并通过签名加密等算法以及其他数据检测服务保证接口数据的完整性、安全性、可靠性。并具有完整的全过程日志记录,方便排查异常。提供client与server的重试方案,并通过心跳续约验证接口的可使用性。用户开放接口后,Server 提供一系列监测方案与接口服务。
1
Server
不支持本地部署。基于netty实现与client的交互,提供对开放接口用户的鉴权、接口安全性的检测、接口可用性的监控、接口限流降级策略、开放接口的限权、接口调用、接口计费、接口加密开放、接口mock、接口调用记录、接口留言、调用多形式结果导出等功能。
1
网关
请求统一入口,提供对请求的鉴权,转发等功能。并对接口模块提供黑白名单、提供日志记录、限流、降级等服务。由于其基于WebFlux框架实现,WebFlux框架底层使用了高性能的Reactor模式通信框架Netty,所以对接口的转发等操作由网关实现。
1
# 设计原则
设计过程中遵循
- 单一职责原则(Single Responsibility Principle, SRP):一个类或模块应该只负责一项职责,且该职责应该在这个类或模块内部封装起来。
- 开闭原则(Open-Closed Principle, OCP):对扩展开放,对修改关闭,即在类或模块的设计上要尽量避免对已有代码的修改,而是通过扩展已有代码实现新的功能。
- 里氏替换原则(Liskov Substitution Principle, LSP):子类型必须能够替换掉它们父类型,并且不会影响程序的正确性。
- 接口隔离原则(Interface Segregation Principle, ISP):客户端不应该强制依赖于它们不需要的接口,即每个接口应仅包含其客户端需要的方法。
- 依赖倒置原则(Dependency Inversion Principle, DIP):高层模块不应该依赖于底层模块,而应该依赖于抽象接口。同时,抽象接口不应依赖于具体实现,而是应该由具体实现来依赖于抽象接口。
- 迪米特法则(Law of Demeter, LoD):一个对象应当对其他对象有尽可能少的了解,即应该最大限度地减少对象之间的耦合度。
- 组合/聚合复用原则(Composite/Aggregate Reuse Principle, CARP):优先使用组合或聚合关系来实现代码的复用,而不是使用继承关系。
并遵循安全性优先,注意系统性能,降低GC风险。