微服务,是现阶段开发建设云原生应用程序的流行趋向。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 翻译】的更多相关文章

  1. **RESTful API版本控制策略

    做RESTful开放平台,一方面其API变动越少, 对API调用者越有利:另一方面,没有人可以预测未来,系统在发展的过程中,不可避免的需要添加新的资源,或者修改现有资源.因此,改动升级必不可少,但是, ...

  2. 对 API 平台的再思考【eolink翻译】

    API 是推动现代企业数字化转型的基础.它不但连接了内部应用程序.合作伙伴和客户,同时也快速持续地向市场提供了各种新产品.版本和功能. 但当下还是以集中式的 API 交付为主.一个企业的对外 API ...

  3. 如何优化API?8个实用技巧!【eolink翻译】

    使用 API 可以让公司利用现代连接的力量来帮助他们扩大全球影响力.传输数据和改进集成.由于 API 使企业能够简化流程并增强可用性,所以企业会使用一些优化策略,不断优化流程,比如接下来要说到的8个技 ...

  4. 什么是好的 API 设计?【eolink翻译】

    对于试图完善其 API 策略的团队来说,良好的 API 设计是一个经常出现的话题. API 设计的重要性相信不需要赘述,精心设计的 API 的好处包括:更好开发人员体验.更快的文档编制以及更高的 AP ...

  5. 关于API:好的设计和坏的设计【eolink翻译】

    以前开发或更新 API 时,我们经常需要深入讨论对 API 的结构.命名和功能等,这个花费了大量的时间. 随着 API 行业的蓬勃发展,API 设计也越来越重要.这么多年发展下来,一些如REST AP ...

  6. 类的加载,链接和初始化——1运行时常量池(来自于java虚拟机规范英文版本+本人的翻译和理解)

    加载(loading):通过一个特定的名字,找到类或接口的二进制表示,并通过这个二进制表示创建一个类或接口的过程. 链接:是获取类或接口并把它结合到JVM的运行时状态中,以让类或接口可以被执行 初始化 ...

  7. BSON 1.0版本规范(翻译)

    BSON 1.0版本规范 本文翻译自 http://bsonspec.org/spec.html BSON是用于存储零个或多个键/值对为一个单一的实体的一个二进制格式.我们称这个实体为文档(Docum ...

  8. Dapr 官方文档中文翻译 v1.5 版本正式发布

    作者:敖小剑 - Dapr Approver 经过 Dapr 中国社区十余位贡献者一个多月的努力,Dapr 官方文档中文翻译 v1.5 版本完成翻译和审校,正式发布并上线 Dapr 官网. 访问方式 ...

  9. 构建 API 的7个建议【翻译】

    迄今为止,越来越多的企业依靠API来为客户提供服务,以确保竞争的优势和业务可见性.出现这个情况的原因是微服务和无服务器架构正变得越来越普遍,API作为其中的关键节点,继承和承载了更多业务. 在这个前提 ...

随机推荐

  1. IOC容器--1.12. 基于 Java 的容器配置

    用Java的方式配置Spring ,不使用Spring的XML配置,全权交给Java来做 JavaConfig是Spring的一个子项目,在Sring 4  之后成为核心功能 这种纯Java的配置方式 ...

  2. BigInterger && BigDecimal

    BigInterger BigDecimal

  3. pandas子集选取的三种方法:[]、.loc[]、.iloc[]

    pandas读取Excel.csv文件中的数据时,得到的大多是表格型的二维数据,在pandas中对应的即为DataFrame数据结构.在处理这类数据时,往往要根据据需求先获取数据中的子集,如某些列.某 ...

  4. VS Code 真的会一统江湖吗?

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 作者 | ROBEN KLEENE / 策划 | 万佳原文链接:https://blog.ro ...

  5. Git 后续——分支与协作

    Git 后续--分支与协作 本文写于 2020 年 9 月 1 日 之前一篇文章写了 Git 的基础用法,但那其实只是「单机模式」,Git 之所以在今天被如此广泛的运用,是脱不开分支系统这一概念的. ...

  6. 被迫开始学习Typescript —— interface

    一开始以为,需要使用 class 来定义呢,学习之后才发现,一般都是使用 interface 来定义的. 这个嘛,倒是挺适合 js 环境的. 参考:https://typescript.bootcss ...

  7. 玩转ASP.NET 6.0框架-序言

    ASP.NET Core是微软提供的强大的web框架,它有很多潜在的强大而有用的功能. 本专栏的目标是帮助您把框架的隐藏能力最大限度地发挥出来,让您能够按需定制ASP NET Core框架.本专栏提供 ...

  8. 运维:OAAS

    IT和互联网运维的新篇章正要掀开,云计算和运维即服务(OaaS)正在为各类企业提供系统构建和扩展,帮助他们取得在线业务的成功. 互联网信息科技和运维一直在不断变化,包括了IT所覆盖的一切新工具.云.基 ...

  9. 好客租房32-事件绑定this指向(class实例方法)

    class实例方法 利用箭头函数的class实例方法 //导入react import React from 'react'   import ReactDOM from 'react-dom' // ...

  10. [C++STL] set 容器的入门

    set 容器的入门 unordered_set:另外头文件,乱序排放,使用哈希表(便于查找) multiset:可以重复存在的集合.用count()读取个数 创建set的几种方式 常规 set< ...