PopularMVC 搭建规范易用的 API 开发系统开源项目

我要开发同款
匿名用户2020年12月29日
56阅读
开发技术Java
所属分类Web应用开发
授权协议Apache

作品详情

1.1项目架构说明1.1.1PopularMVC跟Springboot的关系

说明

PopularMVC是基于springboot开发的,自然强依赖于springboot和springmvcPopularMVC在springboot提供的能力之上,为开发者编写API接口提供了很多额外的便利性

示意图

PopularMVC使用了springboot带来的所有便利,其在springmvc的基础上提供了额外的功能增强,如下图所示

1.1.2PopularMVC项目组件架构解析

架构图

组件介绍

主要分为以下几类组件

API调用拦截器

基于AOP切面设计的一套API请求、响应拦截处理流程。提供了在调用接口前后做一些通用的预处理,比如说参数校验、参数装饰、访问控制、日志输出、会话控制等等。目前内置的拦截器有:

系统参数校验器请求参数校验器数字签名请求验签器、响应加签器接口防重复提交控制器接口用户会话控制器接口日志打印器接口访问控制器请求、响应内容装饰器

也支持业务灵活定制通用的API调用拦截器。

参数装饰器

参数装饰器机制通过遍历参数内容,逐个字段进行修饰,具体修饰规则由特定的装饰器制定。常见的使用场景有,对请求参数解密、响应参数加密、响应参数国际化、响应参数脱敏等等

注意:参数装饰器只能对参数内容做修饰,而无法改变参数类型。

目前内置的参数装饰器有:

请求参数解密器响应参数加密器系统参数自动填充器响应参数国际化翻译器

也支持业务灵活拓展参数装饰器。

API响应序列化预处理器

响应预处理器机制可以在接口返回内容给调用者之前进行额外的处理,此时可以更灵活的修饰返回内容,可以突破无法修改参数类型的限制,适用于对整个响应结构定制化处理的场景。

目前内置的响应预处理器有:

API响应自动包装预处理器API响应错误码和系统参数定制化转换器

当然,也支持业务灵活拓展。

方法查询缓存拦截器

提供对查询类方法调用的结果进行缓存。

API异常统一处理器

接口调用过程中任何步骤出现异常,均能自动处理,并反馈信息给调用者。

支持对特定异常自定义处理,如果未处理,统一交由内置的默认异常处理器进行护理。

统一国际化翻译管理器

接口返回内容均支持国际化翻译能力。

已整合了springi18n国际化翻译能力,也支持拓展业务自定义国际化翻译器。

统一错误码管理器

研发人员无需再关注业务错误码的定义和国际化翻译工作,可以做到定义简单、使用简单、易于理解、配置灵活

支持自定义系统错误码、业务错误码支持业务错误码自动生成支持业务错误码以异常的方式抛出,系统自动处理

自动接口文档生成器

已内置swagger+knif4j,只需指定API包路径即可实现接口文档的自动生成。

1.2其他说明

如果你有遇到如下困扰时,你也许可以尝试使用PopularMVC框架

服务器API缺乏统一标准的输入输出参数,难以统一规范开发人员的接口格式

缺乏简单、高效、统一的接口异常处理机制

绞尽脑汁思考错误码的命名、编号和处理机制

虽然使用参数校验注解校验API请求参数已经非常方便,但是又对其缺乏校验结果的统一处理而苦恼

项目服务于多个国家的用户,繁重的国际化工作也许会让你崩溃

API缺乏权限控制、安全认证、数据加密、防重复提交等等,直接裸奔

还没有找到顺手的服务器缓存工具,对springcache的注解槽点满满等

时常为了写接口文档而占用太多codingtime,而且接口文档还无法实时与接口变更保持同步

现在你有福了,你只需要引入PopularMVC框架,并为你的SpringBoot应用添加@EnablePopularMvc注解,即可解决上述所有的困扰!

PopularMVC为你默默做了哪些工作呢?

首先,PopularMVC是基于springboot的web应用框架,享受了springboot带来的一切便利性再者,其对开发WEBJSONAPI的规范性、易用性、健壮性做了很多的业务增强

PopularMVC的存在意义在哪?

一个字,那就是"爽",让开发者爽,让接口使用者爽!

规范web应用的API输入输出简化开发人员的工作,节省研发成本,给开发者无微不至的关爱!

PopularMVC提供的业务功能有哪些呢?

那么请听我慢慢道来,其提供了如下业务功能:

规范API请求参数,支持系统参数名自定义和系统参数的拓展,系统参数的校验等等规范API响应参数,支持系统参数名自定义和添加额外的系统参数API响应信息自动补全系统参数,开发者无需再手动添加响应壳信息应用内统一的国际化翻译能力,已经整合springi18n,而且支持业务灵活拓展国际化能力接口响应信息国际化,为需要国际化的字段添加@LanguageTranslate注解即可自动翻译内容后返回给调用者统一的异常处理机制,全局拦截API调用异常并处理,处理结果经国际化处理后以标准的API响应格式返回给调用者,业务侧可以对特定异常进行灵活处理简单易用的接口错误码,发现不满足API执行条件,直接抛出BusinessException异常即可通过统一异常处理机制得到预期的API响应。支持自定义系统错误码、业务错误码;依据业务错误码KEY值自动生成错误码数值;并可以对服务内的自动生成的业务错误码值进行范围限制,这样有助于不同业务服务间的错误码分段;API请求参数、响应参数的自动校验,校验结果自动处理后通过API响应反馈给调用者简单方便的缓存管理器,使用Guavacache作为默认的本地缓存管理器,支持缓存管理器的灵活拓展,提供@CacheMethodResult和@CacheMethodResultEvict注解实现方法接口结果的缓存和失效接口安全相关组件,验签、加解密、防重复提交等等,使用时只需要为你的API添加一个注解即可搞定接口会话管理机制,提供Guavacache实现的默认本地会话管理器,支持业务灵活定制以支持分布式会话管理接口文档化支持,提供了swagger接口文档自动生成,并整合了knife4j提供简单易用的实时api文档接口调用日志打印,提供对接口请求参数信息、接口响应信息的简要打印,预留了接口调用日志持久化机制,用于业务方定制流量监控相关功能web容器性能参数优化(迭代加)接口实时流量监控和管理(迭代加)更细粒度的接口访问权限控制(迭代加),主要为应用提供简洁易用的内置权限管理组件日志采集功能的集成支持(迭代加)devops的支持(迭代加)2、项目模块模块说明地址popular-web-mvc为springboot应用提供API业务增强解决方案https://mvnrepository.com/artifact/com.danyuanblog.framework/popular-web-mvcpopular-web-mvc-demopopularMVC框架使用完整示例demohttps://gitee.com/danyuanblog/PopularMVC/tree/master/popular-web-mvc-demopopular-web-mvc-simple-demospopularMVC框架简易demo集合,后续的使用示例尽量从单个项目包含单个特性去逐个演示https://gitee.com/danyuanblog/PopularMVC/tree/master/popular-web-mvc-simple-demos3、入门demo3.1项目结构

项目结构

├─src│└─main│├─java││└─com││└─danyuanblog││└─framework││└─demo││└─popularmvc││├─controller│││││││└─TestController.java│││││└─startup││StartDemoApplication.java#项目启动类│││└─resources││application.yml#项目配置信息,可省略│││└─i18n#自定义国际化支持,可省略│└─messages#项目自定义国际化翻译信息│messages.properties│messages_en_US.properties│messages_zh_CN.properties│#还可添加其他国际化翻译内容└─pom.xml

引入模块依赖,在pom.xml添加

<dependency><groupId>com.danyuanblog.framework</groupId><artifactId>popular-web-mvc</artifactId><version>${popular-web-mvc.version}</version></dependency>3.2启用PopularMvc框架/***TitleStartDemoApplication.java*Description*@authordanyuan*@dateOct31,2020*@version1.0.0*site:www.danyuanblog.com*/packagecom.danyuanblog.framework.demo.popularmvc;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importcom.danyuanblog.framework.popularmvc.annotation.EnablePopularMvc;@SpringBootApplication@EnablePopularMvcpublicclassStartDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(StartDemoApplication.class,args);}}3.3测试接口代码示例

代码如下,TestController.java

/***TitleTestController.java*Description*@authordanyuan*@dateDec27,2020*@version1.0.0*site:www.danyuanblog.com*/packagecom.danyuanblog.framework.demo.popularmvc.controller;importjava.util.HashMap;importjava.util.Map;importjavax.validation.Valid;importjavax.validation.constraints.NotBlank;importjavax.validation.constraints.NotEmpty;importjavax.validation.constraints.Size;importorg.springframework.validation.annotation.Validated;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importcom.danyuanblog.framework.popularmvc.exception.BusinessException;@RestController@ValidatedpublicclassTestController{/***参数自动校验、响应内容自动包装功能示例*@authordanyuan*/@GetMapping("queryUserInfo")publicMap<String,Object>queryUserInfo(@Valid@Size(max=20,min=6)@NotBlank@RequestParamStringusername){System.out.println("查询用户["+username+"]的信息!");//TODO:执行业务逻辑//mock数据Map<String,Object>userInfos=newHashMap<>();userInfos.put("username",username);userInfos.put("age",23);userInfos.put("sex","男");userInfos.put("desc","阳光乐观外向,喜欢唱歌、打篮球!");//返回数据returnuserInfos;}/***业务异常的使用示例*@authordanyuan*/@PostMapping("user/regist")publicvoiduserRegist(@Valid@NotEmptyStringusername,@Valid@NotEmptyStringpassword){//TODO:执行业务逻辑,发现账号已存在,直接通过抛出异常的方式提示用户thrownewBusinessException("用户名[{0}]已存在,请更换!").setParam(username);}}3.4测试接口结果

接口文档访问地址:https://localhost:8080/doc.html

3.4.1测试参数校验

请求参数

knif4j接口文档调试时自动提示参数不能为空

提交非法请求参数

结果

{"msg":"[参数异常]",#错误信息概览"code":120002,#系统错误码"data":{"subErrors":[{"error":"javax.validation.constraints.Size.message",#业务错误码"msg":"[queryUserInfo.username]个数必须在6和20之间"#详细错误信息}]}}3.4.2测试正常响应信息返回

请求参数

结果 

{"code":0,"data":{"sex":"男","age":23,"username":"JoneLacy","desc":"阳光乐观外向,喜欢唱歌、打篮球!"}}3.4.3测试业务异常的使用

请求参数

结果

{"msg":"用户名[test]已存在,请更换!","code":200000}4、交流与答疑

​此项目的设计初衷源于本人在多年API接口开发经验上,从接口规范、开发便捷易用、配置简单这些角度出发而总结出来的一套API解决方案。通过简单引入PopularMVC组件,可以快速搭建一套规范易用的API开发系统。

​开源的目的在于,一则希望此项目能帮助更多的研发人员提升API开发质量,提供大量易用的开发套件提升研发人员的开发效率;二则希望更多的人加入到开源中,促进开源项目的成长,然后服务于更多的开发者;其次希望觉得此项目不错的朋友给个Star,分享给更多的朋友,让大家一起进步!

​如果在使用此框架的过程中有任何疑问或者好的建议可以通过以下联系方式找到大部队,大家一起交流一起进步!

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论