让SpringMVC支持可版本管理的Restful接口
2017-08-11 10:46
246 查看
需求
移动互联网时代的到来,软件开发的模式也在变化。记得以前做B/S的后台开发,基本上没有Http接口一说,全部是通过渲染模板技术(jsp,freemark)把最终html展示给最终用户。现在完全变了,基于后台接口提供方,我们从来不是针对只是浏览器展示的后台输出,而是各种终端,比如android,ios。所以设计接口的时候一定要小心,一旦放出去的接口可能就永远都难以变动(除非你强制客户端用户升级)。我们知道,RestfulAPI已经成为接口设计的一个业务准则。如果你还不是很清楚什么是Restful,推荐你看一下这篇文章: RESTful API 设计指南 。其实,我们就是设计一套基于http协议的业务接口,但是随着时间变迁,业务的变化,或者我们协议本身的优化,都有可能要改变之前存在的接口。这时候给所有接口进行版本管理就显得很重要了,比如某个添加用户的接口,由于业务发展很大,接口的字段属性变化很大,只能重新定义一个新的接口,由
/v1/user/add 变成了 /v2/user/add,这样我们就要维护两套接口的逻辑,映射到代码里,就是要维护两个不同的业务方法。所以这篇文章主要讲的是基于SpringMVC开发的应用,怎么通过扩展开发来方便我们在代码层级管理各不同的版本接口。
SpringMVC原理概述
SpringMVC核心思想就是通过一个servlet(DispatchServlet)把请求转发到各个执行方法上(Controller的method),截张官方的图如下:就是把某个形式的URL(当然,url不是唯一的决定条件,还有比如请求方法,get还是post,请求头中的信息)映射到某个类的具体方法上,这个核心的组件在SpringMVC中叫做: HandlerMapping。我们一般在spring的config文件中做如下配置时会自动初始化加载一个HanlderMapping的实现类:RequestMappingHandlerMapping:
我们一般发布出去的接口,都是以http://api.custom.com/v1,http://api.custom.com/v2发布出去的,从v1到v2,往往我们只会变动其中一小部分接口,但是客户端必需统一版本号调用 。
不能智能向上兼容接口。如果现在我们某个接口最高版本是v2,如 /v2/hello, 现在通过 /v3/hello 要能够自动适配到 /v2/hello上。
所以我们通过Spring强大的扩展机制增加几个扩展类来完成这个工作。先看下SringMVC中HandlerMapping加载初始化和动态根据url到handler的流程:
可以看到,HandlerMapping就是通过继承InitializingBean接口在完成实例后,扫描所有的Controller和标识RequestMapping的方法,缓存这个映射对应关系。然后在应用运行的时候,根据请求的request来找到相应的handler来处理这个请求。所以,我们添加扩展类:
ApiVersion
ApiVesrsionCondition
CustomRequestMappingHandlerMapping
WebConfig
现分别来看下这个类,首先看下ApiVersion这个注解:
再来看下 ApiVersionCondition 这个类。这个类就是我们自定义一个条件筛选器,让SpringMVC在原有逻辑的基本上添加一个版本号匹配的规则:
详细代码: https://github.com/hongfuli/study_notes/tree/master/spring/samples
感谢:http://www.cnblogs.com/jcli/p/springmvc_restful_version.html
相关文章推荐
- 让SpringMVC支持可版本管理的Restful接口
- 让SpringMVC支持可版本管理的Restful接口
- 让SpringMVC支持可版本管理的Restful接口
- SpringMVC支持可版本管理的Restful接口
- SpringMVC 接口版本管理/IP访问控制/ANT打包发布到LINUX
- ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播点播,还带运营在线支付功能!完全免费提供!
- springMVC支持restful服务写出的服务端^_^
- springmvc事物管理 总结------- 只支持事物间 不支持事务内---???
- 延云YDB从1.11版本起,正式无缝支持帆软等支持hive接口的报表工具
- 图片上传--SpringMVC实现RESTful接口
- springmvc开发rest接口时支持“请求的URI地址不存在”
- [ SpringMVC ] 整合 Swagger UI 开发后台接口动态管理
- SpringMVC 4.2 后增加跨域支持app、接口(注解CrossOrigin)
- 延云YDB从1.11版本起,正式无缝支持帆软等支持hive接口的报表工具
- Restful形式接口文档生成之Swagger与SpringMVC整合手记
- springmvc实现webapi接口版本兼容
- springmvc restful 支持
- Restful风格API接口开发springMVC篇
- POSTMAN测试SpringMVC RESTFul风格的服务端接口始终得不到值
- 做个支持版本管理的备份软件