RESTful接口版本管理
REST简介
REST,全称是Representational State Transfer
,译为表现层状态转化。REST并不是一个标准,而是一种软件架构风格。
在REST风格下,客户端通过url访问网络上的一个资源,通过HTTP动词请求服务端对资源进行操作。
接口版本
服务端接口是会不断变化更新的,一个好的设计,是提供不同版本的接口,而不是在一个接口上进行修改。部署时,服务端包含不同版本的接口,客户端可以依旧使用老版本的接口,也可以随服务端升级到新版本。当所有客户端都升级到新版本时,服务端可以考虑移除旧版本的接口。
在REST风格下,我们可以通过对接口增加版本号的概念,去区分不同版本的接口。版本号有两种表现形式,一种是包含在url中,一种是包含在HTTP头中。例如:
1 | http://somewhere.com/xxx/v1/user |
Spring Boot starter源码
接口版本管理源码实现思路
Spring Boot提供了starter的标准,starter完成自动配置,开发者只需要引用starter,就可以实现功能。我们可以通过开发一个api-version-spring-boot-starter,帮助应用快速实现接口版本管理。
Spring Boot对于自定义starter提出的指导有以下几点:
- 项目包含两个模块,一个是autoconfigure,一个是starter
- autoconfigure模块包含自动配置相关的代码,和一个清单文件,清单文件中包含自动加载bean的class名
- starter需引用autoconfigure模块和其他必要的依赖
因此,我们定义了两个模块,一个是autoconfigure,一个是starter,在autoconfigure中完成接口版本管理的功能和自动配置,实现在url中标明版本号。
Log4j2内存占用高解决方案
guacamole插件开发
Guacamole手册:Guacamole手册
Guacamole是什么?
- Apache Guacamole是一个无客户端的远程桌面网关。
- 它支持VNC,RDP和SSH等标准协议。
- 我们称之为无客户端,因为不需要插件或客户端软件。
- 感谢HTML5,一旦Guacamole安装在服务器上,您访问桌面所需的只是一个Web浏览器。
为什么要用Guacamole?
- 随时随地访问PC
- 保持桌面在云端
- 免费、开源
- 建立在文档齐全的API之上
- 商业支持
Log4j2异步日志
Log4j 2的异步日志详细介绍:Async Loggers
Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。
Log4j 2基于LMAX Disruptor库,实现了一个高性能的异步记录器。在多线程场景中,异步记录器的吞吐量比Log4j 1.x和Logback高18倍,延迟低。
Spring Security动态配置
我们在开发Web应用时,通常希望保护某些资源(页面或数据),对这些资源做安全控制,比如:未登录的用户访问资源时,自动跳转至登录页面;拥有管理员身份的用户,可以访问某些管理界面。
本文介绍一种基于Spring Security的动态配置权限的方法,使用的是JavaConfig的方式。
Spring Security是一个功能强大且可高度自定义的身份验证和访问控制框架。具有以下特性:
- 对身份验证和授权的全面和可扩展的支持
- 防止会话固定,点击劫持,跨站点请求伪造等攻击
- Servlet API集成
- 可选与Spring Web MVC集成
- 还有很多啊..
Maven个性化打包说明
以实际项目为例,介绍maven打包插件的使用,实现个性化打包。
工程目录结构
miapp项目分为两个模块
yd-miapp模块为web项目
java代码部分
其中,function目录下,存在不同中心的组件代码
静态资源部分
其中,views目录下,存在不同中心的静态资源
目前war包目录结构
目前war包中包含了全部的组件代码和静态资源,与工程目录结构类似。
独立打包
war包目录结构
比如,我们打包的是城市代码为00031400。独立打包时,只包含00031400城市的组件和静态资源。
注意,00000000和99999999是特殊的城市代码,d00000000存放的是公共资源,d99999999存放的是模板资源。