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作为其中的关键节点,继承和承载了更多业务. 在这个前提 ...
随机推荐
- XCTF练习题---MISC---pdf
XCTF练习题---CRYPTO---混合编码解析 flag:flag{security_through_obscurity} 解题步骤: 1.观察题目,下载附件 2.根据题目提示,下载文件,发现是一 ...
- 『现学现忘』Git基础 — 19、在Git中进行忽略文件操作
目录 1.忽略文件说明 2.忽略文件的原则 3..gitignore忽略规则 4.忽略文件的三种方式 (1)忽略单个仓库中的文件(远程共用) (2)忽略单个仓库中的文件(本地使用) (3)全局忽略 1 ...
- 【笔记】PyTorch快速入门:基础部分合集
PyTorch快速入门 Tensors Tensors贯穿PyTorch始终 和多维数组很相似,一个特点是可以硬件加速 Tensors的初始化 有很多方式 直接给值 data = [[1,2],[3, ...
- python mysqldb 报错: ProgrammingError: must be real number, not str 解决
代码: sql = 'insert into book(book_name,book_desc,origin_price,publish_id,tag_id,book_img) values(%s,% ...
- css盒子模型简析
盒子模型分为标准盒子模型和怪异的盒子模型 1.标准的盒模型 (content-box) 你设置的宽和高(width/height)是内容的部分宽高,所以盒子的实际宽度=内容的宽高+boder+padd ...
- vue - vue基础/vue核心内容(2)
今天的内容书接上回,同样是vue的核心基础部分,今天偏向于理论性,特别是vue对于数据对象的监测那一块,刚开始琢磨了半天,这股劲一过,现在好理解多了 10.watch和computed对比 计算属性案 ...
- ubuntu 20.04 source mirror(aliyun)
x64 deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://m ...
- Spring Security之短信登录
实现短信验证码登录 前面实现了 用户名+密码 的登录方式,现在实现一下短信验证码登录. 开发短信验证码接口 短信验证码和图形验证码类似,用户从手机短信得到验证码和从图片得到验证码类似. 校验短信验证码 ...
- 好客租房16-jsx中的列表渲染
如果要渲染一组数组 应该使用数组的map方法 注意:渲染列表时候添加key属性 key属性的值要保持唯一 原则:map()遍历谁 就给谁添加key属性 尽量避免索引号作为key //导入react i ...
- CF1580E Railway Construction
CF1580E Railway Construction 铁路系统中有 \(n\) 个车站和 \(m\) 条双向边,有边权,无重边.这些双向边使得任意两个车站互相可达. 你现在要加一些单向边 \((u ...