细说RESTFul API之版本管理
目录
接口实现版本管理的意义
API版本管理的重要性不言而喻,对于API的设计者和使用者而言,版本管理都有着非常重要的意义。
首先,对于API的设计和实现者而言,需要考虑向后兼容性,但是随着业务的发展或需求的变更往往会导致兼容性实现非常复杂,因此引入API版本管理将能解决这个尴尬。此时可以提供多个版本的API实现,不需要再为了向后兼容性而绞尽脑汁。
其次,对于API的使用者而言,也可以灵活选择使用不同版本API,而不用担心API的兼容性问题。
如何实现接口的版本管理
对API进行版本管理目前已经有许多成熟的做法,比如:将版本信息放在URL中,或者放在HTTP消息头中,甚至可以放在URL参数或者消息体中(将版本信息放在HTTP消息头和作为URL参数或消息体中无本质区别)。不同的版本管理方式实现难易程度各异,各有利弊。
- 将版本信息放在URL中虽然破坏了REST的架构风格,但是因版本不同而带来的变化在URL中就能体现,更加直观。
- 将版本信息方在HTTP请求头,URL参数甚至消息体中,好处是保持URL不变,但是API实现者需要解析传递的版本参数调用不同的实现方法。
项目实战
在基于Spring MVC(如Spring Boot)的项目中使用将版本信息放在URL中的方式进行版本管理,这样做是基于如下几点考虑:
- API的变化直接在URL中体现,直观明了,也不用解析版本参数。
- 对应不同版本的URL可能需要传递不同的参数,这样对于API实现者而言是在不同的Controller方法中解析的,不用考虑在解析请求参数时的兼容性,实现简单;而且从设计模式上可以实现拥抱变化。
- Spring MVC框架对于在URL中体现版本信息这种方式原生支持就比较好,不需要做其他适配工作。
【参考】
https://segmentfault.com/a/1190000006165182 RESTful API版本控制策略
http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/ How are REST APIs versioned?
https://blog.csdn.net/hengyunabc/article/details/20506345 Web API 版本控制的几种方式
https://juejin.im/post/5a0bd3e3f265da431047eabf 怎么做 Web API 版本控制?
细说RESTFul API之版本管理的更多相关文章
- 细说RESTful API之文档管理
目录 API文档格式 文档管理方式 基于注解实现,代码和文档在一起 Swagger Api2Doc 基于API测试工具生成 Postman rest-client 独立编写文档 RAP DOCleve ...
- 细说RESTful API之幂等性
目录 接口幂等性的含义 接口符合幂等性有什么用处 HTTP方法的幂等性与安全性 如何设计符合幂等性的接口 写在最后 接口幂等性的含义 幂等性原本是数学中的含义,表达式的是N次变换与1次变换的结果相同. ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- 拿nodejs快速搭建简单Oauth认证和restful API server攻略
拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最 ...
- 细说REST API
1. REST概述 REST(英文:Representational State Transfer,又称具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一 ...
- 使用 Swagger 文档化和定义 RESTful API
大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Descript ...
- 初见微服务之RESTful API
1. REST名称由来 REST全称为Representational State Transfer,即表述性状态转移,最早由Roy Feilding博士在世纪之交(2000年)提出,喜欢追根溯源的朋 ...
- 集成swagger2构建Restful API
集成swagger2构建Restful API 在pom.xml中进行版本管理 <swagger.version>2.8.0</swagger.version> 给taosir ...
- Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档
前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...
随机推荐
- Ansible常用模块介绍
ansible < HOST-PATTERN > [ -f FORKS ] [ -m MOUDULE ] [ -a "ARGS" ] [ -o ] MOUDULE: p ...
- 进程以及进程通信(IPC)类型
这里用我有限的知识来解释同时参考了一些其他博主的子类,希望能给与一部分入门的朋友一个清晰的理解,有问题之处还请指出 首先简单谈一下什么是进程? 答:进程是装入内存运行的程序段,是许多的系统对象拥有权的 ...
- 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式)
不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式) 问题描述: 朋友说离线腾讯视频是 qlv 格式的,只能使用腾讯视频软件打开.让我帮忙想想办法,能不能将 qlv 格式转换成 m ...
- CentOS7.x mini安装OVS
命令均在root用户下运行: 一.关闭防护墙及selinux sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config setenfor ...
- java8 异步api、循环、日期
java8 异步api.循环.日期 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/10801470.html 异步api 对于多任务耗时的业务场景,一般我们会用 ...
- 在CentOS 7上安装Python3
源码包安装 Python官方没有对Linux打包, 需要下载源码包进行编译. 可以自己下载最新版本的Python, 在Python下载页面, 点击Python3.x.x版本对应的Download, 在 ...
- Ruby中的常量:引号、%符号和heredoc
数值字面量 没什么好说的,唯一需要说明的是分数字面量:数值后加上一个后缀字母r表示分数字面量. # 整数字面量 0 1 100 10_000_001 # 千分位 # 浮点数字面量 0.1 1.0 1. ...
- C#学习笔记:ListBox控件的用法
样式如下: 实现的代码一: using System;using System.Collections.Generic;using System.ComponentModel;using System ...
- java-基础语法01
一.变量 1. 何为变量?:在数学中变量就是一个不确定的量,随时都会改变,在java中变量也是这样,只不过它是内存中装载数据的小盒子,你只能用它来存数据和取数据. 2. 变量的基本类型(四类八种),见 ...
- 【Netty】Netty简介及服务器客户端简单开发流程
什么是Netty Netty是一个基于Java NIO的编写客服端服务器的框架,是一个异步事件框架. 官网https://netty.io/ 为什么选择Netty 由于JAVA NIO编写服务器的过程 ...