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作为其中的关键节点,继承和承载了更多业务. 在这个前提 ...
随机推荐
- 浅尝Spring注解开发_Bean生命周期及执行过程
Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...
- VMware配置与管理DNS服务器
一,安装DNS服务器角色 1,点击[开始]→[管理工具]→[服务器管理器]→"仪表板"选项的[添加角色和功能] 持续单击[下一步],直到出现"选择服务器角色"窗 ...
- vmware安装或卸载时,显示无法打开注册表项
vmware卸载是出了名的臭名昭著,因为太难删干净了,删不干净又会有各种各样的问题.比如下文这个"无法打开注册表项" 这个我相信有很多人在重装vmware的时候遇到过,因此我来 ...
- 为什么建议大家使用 Linux 开发?
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Linux 能用吗? 我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上. ...
- viewport布局
1.viewport实例 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <h ...
- Git使fork项目与源项目保持一致
操作如下: 1.先clone自己的fork项目到本地工程目录 git clone git@gitlab.alibaba-inc.com:riqi/{project}.git 2.进入该项目目录 ...
- 交互式 .Net 容器版
背景介绍 在之前的文章 - 交互式 .Net 中已经介绍了什么是交互式 .Net,文中是通过 Visual Studio Code 插件的方式实现交互式 .Net 的.现在,我们将使用容器的方式实现交 ...
- Arthas常用功能及一次线上问题排查
一.Arthas简介 Arthas是Alibaba开源的Java诊断工具,功能很强大,它是通过Agent方式来连接运行的Java进程.主要通过交互式来完成功能. https://arthas.aliy ...
- MongoDB 设置用户和密码
每日一句 Zeal without knowledge is fire without light. 没有知识的热忱犹如火之无光. 给每个数据库设置单独的管理员 我们除了可以设置数据库的超级管理员以外 ...
- nginx 部署前端资源的最佳方案
前言 最近刚来一个运维小伙伴,做线上环境的部署的时候,前端更新资源后,总是需要清缓存才能看到个更新后的结果.客户那边也反馈更新了功能,看不到. 方案 前端小伙伴应该都知道浏览器的缓存策略,协商缓存和强 ...