RESTAPI 版本控制策略【eolink 翻译】
微服务,是现阶段开发建设云原生应用程序的流行趋向。API 版本控制有益于在辨别出所需要的调节时加速迭代更新的速度。
根据微服务架构的关键构件其一,是 API 的设计和规范。针对 API,版本控制是不可或缺的,它能使企业客户能不断运用现阶段有的 RESTAPI ,并在他们做好充分的准备时将他们的应用程序转移到一个新的 API 。
何时要更新新版本?
版本控制帮我们在 API 中启用中断的变化,譬如根据导进强制参数对申请格式实现的调节、响应消息的格式调节或结构优化对响应数据实现的调节,或是不兼容使用 API 来供应加强的作用。
怎么对RESTAPI进行版本控制
有5种不同的方法能做到。
根据URI相对路径实现版本控制
根据查看参数实现版本控制
根据自定义header实现版本控制
根据内容讨论实现版本控制
根据API管理工具实现版本控制
版本根据URI路径
是为端点实现版本控制的最常见的方法其一。版本无须都是数字,或是 v[x] 格式,您可以用其他的有意义的标识符,如数据或版本号,这有益于 API 生产团队无缝地合并一个新的调节。
http://api.example.com/v1
根据查看参数实现版本控制
另外一种选择是运用版本当做查看参数,这样的方法简单容易实现,除了确立规定的版本,不然我们能够将最新的 API 版本设置成初始版本。
如:
http://api.example.com/customers?version=v1
根据自定义 header 实现版本控制
我们还能根据自定义表头实现版本控制。这有益于防止对 URI 实现其他的填充。
@RestController
@RequestMapping("/")
public class ProductController {
@Autowired
private ProductRepository repository;
@GetMapping(value= "products", headers = {"X-API-VERSION=v1"})
public List<Product> findAll() {
return repository.findAll();
}
@GetMapping(value= "products", headers = {"X-API-VERSION=v1"})
public List<Product> findAllV2() {
return repository.findAll();
}
}
这样的方法的仅有的主要缺点是它要维护一个 header 以运用 header 的版本和处理。
根据内容讨论实现版本控制
这样的方法能协助企业客户运用 AcceptHeader 专门申请1个版本。倘若客户端不申请相应版本,则能实现服务以供应初始表示。
GET /customers/1234 HTTP/1.1 接受:application/vnd.v1+json
@RestController
@RequestMapping("/")
public class ProductController {
@Autowired
private ProductRepository repository;
// Find
@GetMapping(value= "products", headers = {"Accept=application/vnd.v1+json"})
List<Product> findAll() {
return repository.findAll();
}
@GetMapping(value= "products", headers = {"Accept=application/vnd.v2+json"})
List<Product> findAllV2() {
return repository.findAll();
}
}
如此一来,我们就开启了包含 Accept 报头的2个版本的 GET/productsendpoint 。当运用 header 值的 v1发出 curl 申请时,响应将根据版本 v1 。
curl -L -X GET 'http://localhost:8080/products' \ -H 'Accept: application/vnd.v1+json'
[
{
"name": "IdeaPad Slim 5 (15, AMD)"
}
]
当运用 header 值的 v2 发出 curl 申请时,响应将根据 v2 版本。
curl -L -X GET 'http://localhost:8080/products' \
-H 'Accept: application/vnd.v2+json'
[
{
"name": "IdeaPad Slim 5 (15, AMD)"
}
]
当未成功发送 Accept 报头时,它将响应默认版本,就是这里的 v1 版本。
curl -L -X GET 'http://localhost:8080/products'
[
{
"name": "IdeaPad Slim 5 (15, AMD)"
}
]
406 Not Acceptable
curl -L -X GET 'http://localhost:8080/products'
-H 'Accept: application/vnd.v3+json'
{
"timestamp": "2021-09-13T14:30:12.263+0000",
"status": 406,
"error": "Not Acceptable",
"message": "Could not find acceptable representation",
"path": "/products"
}
借助 API 管理工具实现版本控制
如今市场上有许多API管理工具,能做到数据可视化实现版本控制,程序流程还都较为简单,像 Eolink:www.eolink.com , 由于有自动备份更改历史的功能,只要构建版本号,给不一样的更改历史绑定版本号,就能做到版本控制, API 修改后还会自动同步到相匹配版本的接口文档里。

总结
伴随着 API 驱动架构的飞速发展和越来越多的人使用,最重要的是对 API 实现版本控制,以最大程度地降低 API 更改所产生的影响并具备更佳的向后兼容性。以上所述每一种版本控制技术都各有利弊,因此我还是强烈推荐用 API 管理工具 Eolink 。
RESTAPI 版本控制策略【eolink 翻译】的更多相关文章
- **RESTful API版本控制策略
做RESTful开放平台,一方面其API变动越少, 对API调用者越有利:另一方面,没有人可以预测未来,系统在发展的过程中,不可避免的需要添加新的资源,或者修改现有资源.因此,改动升级必不可少,但是, ...
- 对 API 平台的再思考【eolink翻译】
API 是推动现代企业数字化转型的基础.它不但连接了内部应用程序.合作伙伴和客户,同时也快速持续地向市场提供了各种新产品.版本和功能. 但当下还是以集中式的 API 交付为主.一个企业的对外 API ...
- 如何优化API?8个实用技巧!【eolink翻译】
使用 API 可以让公司利用现代连接的力量来帮助他们扩大全球影响力.传输数据和改进集成.由于 API 使企业能够简化流程并增强可用性,所以企业会使用一些优化策略,不断优化流程,比如接下来要说到的8个技 ...
- 什么是好的 API 设计?【eolink翻译】
对于试图完善其 API 策略的团队来说,良好的 API 设计是一个经常出现的话题. API 设计的重要性相信不需要赘述,精心设计的 API 的好处包括:更好开发人员体验.更快的文档编制以及更高的 AP ...
- 关于API:好的设计和坏的设计【eolink翻译】
以前开发或更新 API 时,我们经常需要深入讨论对 API 的结构.命名和功能等,这个花费了大量的时间. 随着 API 行业的蓬勃发展,API 设计也越来越重要.这么多年发展下来,一些如REST AP ...
- 类的加载,链接和初始化——1运行时常量池(来自于java虚拟机规范英文版本+本人的翻译和理解)
加载(loading):通过一个特定的名字,找到类或接口的二进制表示,并通过这个二进制表示创建一个类或接口的过程. 链接:是获取类或接口并把它结合到JVM的运行时状态中,以让类或接口可以被执行 初始化 ...
- BSON 1.0版本规范(翻译)
BSON 1.0版本规范 本文翻译自 http://bsonspec.org/spec.html BSON是用于存储零个或多个键/值对为一个单一的实体的一个二进制格式.我们称这个实体为文档(Docum ...
- Dapr 官方文档中文翻译 v1.5 版本正式发布
作者:敖小剑 - Dapr Approver 经过 Dapr 中国社区十余位贡献者一个多月的努力,Dapr 官方文档中文翻译 v1.5 版本完成翻译和审校,正式发布并上线 Dapr 官网. 访问方式 ...
- 构建 API 的7个建议【翻译】
迄今为止,越来越多的企业依靠API来为客户提供服务,以确保竞争的优势和业务可见性.出现这个情况的原因是微服务和无服务器架构正变得越来越普遍,API作为其中的关键节点,继承和承载了更多业务. 在这个前提 ...
随机推荐
- IOC容器--1.12. 基于 Java 的容器配置
用Java的方式配置Spring ,不使用Spring的XML配置,全权交给Java来做 JavaConfig是Spring的一个子项目,在Sring 4 之后成为核心功能 这种纯Java的配置方式 ...
- BigInterger && BigDecimal
BigInterger BigDecimal
- pandas子集选取的三种方法:[]、.loc[]、.iloc[]
pandas读取Excel.csv文件中的数据时,得到的大多是表格型的二维数据,在pandas中对应的即为DataFrame数据结构.在处理这类数据时,往往要根据据需求先获取数据中的子集,如某些列.某 ...
- VS Code 真的会一统江湖吗?
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 作者 | ROBEN KLEENE / 策划 | 万佳原文链接:https://blog.ro ...
- Git 后续——分支与协作
Git 后续--分支与协作 本文写于 2020 年 9 月 1 日 之前一篇文章写了 Git 的基础用法,但那其实只是「单机模式」,Git 之所以在今天被如此广泛的运用,是脱不开分支系统这一概念的. ...
- 被迫开始学习Typescript —— interface
一开始以为,需要使用 class 来定义呢,学习之后才发现,一般都是使用 interface 来定义的. 这个嘛,倒是挺适合 js 环境的. 参考:https://typescript.bootcss ...
- 玩转ASP.NET 6.0框架-序言
ASP.NET Core是微软提供的强大的web框架,它有很多潜在的强大而有用的功能. 本专栏的目标是帮助您把框架的隐藏能力最大限度地发挥出来,让您能够按需定制ASP NET Core框架.本专栏提供 ...
- 运维:OAAS
IT和互联网运维的新篇章正要掀开,云计算和运维即服务(OaaS)正在为各类企业提供系统构建和扩展,帮助他们取得在线业务的成功. 互联网信息科技和运维一直在不断变化,包括了IT所覆盖的一切新工具.云.基 ...
- 好客租房32-事件绑定this指向(class实例方法)
class实例方法 利用箭头函数的class实例方法 //导入react import React from 'react' import ReactDOM from 'react-dom' // ...
- [C++STL] set 容器的入门
set 容器的入门 unordered_set:另外头文件,乱序排放,使用哈希表(便于查找) multiset:可以重复存在的集合.用count()读取个数 创建set的几种方式 常规 set< ...