目录

接口实现版本管理的意义

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中的方式进行版本管理,这样做是基于如下几点考虑:

  1. API的变化直接在URL中体现,直观明了,也不用解析版本参数。
  2. 对应不同版本的URL可能需要传递不同的参数,这样对于API实现者而言是在不同的Controller方法中解析的,不用考虑在解析请求参数时的兼容性,实现简单;而且从设计模式上可以实现拥抱变化。
  3. 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之版本管理的更多相关文章

  1. 细说RESTful API之文档管理

    目录 API文档格式 文档管理方式 基于注解实现,代码和文档在一起 Swagger Api2Doc 基于API测试工具生成 Postman rest-client 独立编写文档 RAP DOCleve ...

  2. 细说RESTful API之幂等性

    目录 接口幂等性的含义 接口符合幂等性有什么用处 HTTP方法的幂等性与安全性 如何设计符合幂等性的接口 写在最后 接口幂等性的含义 幂等性原本是数学中的含义,表达式的是N次变换与1次变换的结果相同. ...

  3. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  4. 拿nodejs快速搭建简单Oauth认证和restful API server攻略

    拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最 ...

  5. 细说REST API

    1. REST概述 REST(英文:Representational State Transfer,又称具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一 ...

  6. 使用 Swagger 文档化和定义 RESTful API

    大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Descript ...

  7. 初见微服务之RESTful API

    1. REST名称由来 REST全称为Representational State Transfer,即表述性状态转移,最早由Roy Feilding博士在世纪之交(2000年)提出,喜欢追根溯源的朋 ...

  8. 集成swagger2构建Restful API

    集成swagger2构建Restful API 在pom.xml中进行版本管理 <swagger.version>2.8.0</swagger.version> 给taosir ...

  9. Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档

    前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...

随机推荐

  1. Laravel --- artisan创建表以及填充表数据流程总结

    1.创建建表文件 php artisan make:migration create_comments_table 打开database/migrations/xxx_create_comments_ ...

  2. Fabric1.4源码解析:客户端创建通道过程

    在使用Fabric创建通道的时候,通常我们执行一条命令完成,这篇文章就解析一下执行这条命令后Fabric源码中执行的流程. peer channel create -o orderer.example ...

  3. 【安装】Hadoop2.8.0搭建过程整理版

    Hadoop搭建过程 前期环境搭建主要分为软件的安装与配置文件的配置,集成的东西越多,配置项也就越复杂. Hadoop集成了一个动物园,所以配置项也比较多,且每个版本之间会有少许差异. 安装的方式有很 ...

  4. Java学习笔记——Socket实现文件传输

    我越是逃离,却越是靠近你. 我越是背过脸,却越是看见你. 我从你开始, 我在你结束. 需求:实现局域网下socket传输文件. 客户端步骤: 1.建立与服务器的连接 2.创建client输出流 3.创 ...

  5. kuberbetes基础概念

    部署了一大堆,来了解一下K8S一些基本的概念. 1.Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着Kubern ...

  6. Docker镜像和容器管理(二)

    Docker安装 Docker镜像管理 https://hub.docker.com/ 是公共的一个Docker镜像仓库,类似GitHub一样,上面有非常多的开源项目镜像. 可以直接在命令行搜索镜像 ...

  7. leetcode的Hot100系列--序

    小白程序猿,练练手,做做题目,分享下经验, 有不对的,还请大家能够指出,多多包涵!谢谢!! 先简单,后复杂,循序渐进,希望能够坚持下来, 大家一起进步~~

  8. 01(a)一元函数_多元函数_无约束极值问题的求解

    1. 一元函数的极值问题  (函数光滑) 对于一个一元函数$f(x)$,怎么才能找出它的极值呢? 1.1根据定义:如果存在一点${{x}_{0}}$,在点${{x}_{0}}$的某个领域$U({{x} ...

  9. [AI开发]目标跟踪之计数

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  10. JavaSE核心知识

    一:Java简介 1. Java语言的介绍:Java是一门面向对象编程语言,具有功能强大和简单易用两个特征. 2. Java语言的特点:简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多 ...