QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Web API 的版本控制方案分析

  • 2011-11-18
  • 本文字数:1210 字

    阅读完需:约 4 分钟

源于对 OpenStack Api 版本控制约束问题的探讨,Mark Nottingham 在其博客中分析了云中 Web API 各种版本控制机制。他说,如果将 Web 上的版本 控制与软件版本控制做比较的话,软件版本控制成熟得多,而且一般来说更易于理解。

开发者们习惯了软件版本控制。譬如,在每次发版时都会推出一个版本号。版本号通常包含主版本号和小版本号,有时也会有诸如包版本号之类的称呼。 这种细粒度的版本标识对开发者和用户都非常有益;这些标识的简洁语义有助于判断兼容性和开发过程中的调试。

他接着说,但是,这样的版本思路不能很好地转化成 Web API 的版本控制。

使用了前一 API 版本的用户必须要判断如何用新版 API 进行工作。虽然他们猜测两个版本间应该是兼容的,但是他们却无法肯定。所以,他们仍然需要重写一堆 API。

[……] 简单地将软件版本控制的方法用于 Web API 也抵消了人们使用 HTTP 时得到的许多价值。如果你非要这么做,还不如使用“愚钝”的 RPC 协议。

Mark 认为,Web API 版本控制的主旨是保留与现有用户的兼容性。

一个基本原则是,不能破坏现有用户。他们实现了什么,你无从得知,也无法控制。

他还指出:

[……]Web API 的版本控制本质上是非线性的。换言之,当你产生一个新标识符时,你就产生了一个全新的东西,不论它是一个 HTTP 头、媒体类型标识还是一个 URI。你甚至可以用“foo”和“bar”来代替“V1”和“V2”。

他还就如何使用 HTTP 头的扩展机制实现多种版本控制给出了样例。他倡导通过产品令牌(product tokens)标识并解决实现问题。

他将 Web 上的版本控制分为两类:表现格式变更和资源变更。

很多人(如 Dave )已经充分讨论过表现格式变更的问题了。它们既简单又复杂得让人恼火。总而言之,不要做向后不兼容的更改,如果非要做,就得改变媒体类型。

Mark 认为对资源的变更是一个更为有趣的问题。URI 是经历过尝试和测试的大众较接受的版本控制方法。接受度差一点的方法是超媒体(hypermedia )。

REST 迷们研究在 Web API 中使用 HATEOS 标识已经有很长时间了,而且 Roy 也对许多人不知道这一方法表示惋惜

Mark 的文章中也就使用超媒体公布资源元数据的方法给出了示例。客户端可以通过这些元数据以及服务端提供的各自资源模板来生成 URI。

这样,你就不再需要为接口生成不同的 URI,因为由代理驱动的内容商定能够有效地使用这一入口。

他承认有些人赞同使用 HATEOAS,也有些人反对,但是该解决方案带来的扩展性优势能够作为支持它的强有力的论据。

我认为,[译注:HATEOAS] 的核心观点是,URI 已经用于表示太多东西了——持久标识符、缓存键值、相关性解析、书签等——若再加上版本控制和扩展信息,超负荷使用 URI 的结果只能使其使用效果更差。通过把这些关注点转移到 HATEOAS 的链接关系和媒体类型中,你得到的是一个灵活的、拥抱未来的系统,它能够以可控的方式演进,而无需放弃享受 HTTP(不考虑 REST 了)的益处。

这里有作者原始的分析


查看英文原文: Analysis Of Web API Versioning Options

2011-11-18 00:294846
用户头像

发布了 184 篇内容, 共 80.5 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试/测试开发/全日制 |实践容器化部署与微服务治理

测吧(北京)科技有限公司

测试

程序员一定要知道的!屎山代码风格指南(避免被优化&&避免被接盘)

快乐非自愿限量之名

程序员 代码审查 代码

探索web技术与低代码开发的融合应用

EquatorCoco

云计算 软件开发 低代码 web3

探索AI技术的奥秘:揭秘人工智能的核心原理

快乐非自愿限量之名

人工智能 机器学习 AI技术

Dubbo 3.3.0-beta 版本正式发布

阿里巴巴云原生

阿里云 云原生 dubbo

pdd商品详情数据接口

tbapi

拼多多API接口 拼多多商品详情数据接口 pdd详情数据接口 拼多多商品数据采集

便捷好用的iOS文件管理App

雪奈椰子

软件测试/测试开发/全日制/测试管理丨Vue 页面布局组件-Semantic

测试人

软件测试

TDengine 签约积成电子

TDengine

tdengine 时序数据库

涛思数据获评北京市“专精特新”中小企业

TDengine

涛思数据 tdengine 时序数据库

软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动

霍格沃兹测试开发学社

软件测试/测试开发/全日制|基于Vue.js构建现代化前端应用

测吧(北京)科技有限公司

测试

tb商品详情数据抓取

tbapi

淘宝商品详情数据接口 淘宝API接口 天猫商品详情数据接口 天猫API接口 tb商品详情数据接口

数据库与低代码:加速开发,提升效率的完美结合

不在线第一只蜗牛

MySQL 数据库 sql 低代码

软件测试/测试开发/全日制/测试管理丨Vue 页面布局组件-Vuetify

测试人

软件测试

实时云渲染赋能2023湾区文采会元宇宙虚拟展厅

3DCAT实时渲染

云VR 元宇宙虚拟展厅 线上展厅

文心一言 VS 讯飞星火 VS chatgpt (176)-- 算法导论13.3 5题

福大大架构师每日一题

福大大架构师每日一题

2023 IoTDB Summit:天谋科技产品负责人赵馨逸《利其器:如何用 IoTDB 可视化控制台实现高效管理与运维》

Apache IoTDB

数据库内核那些事|一文Get PolarDB IMCI如何对半结构化数据进行高效分析

阿里云瑶池数据库

数据库 阿里云 数据结构 云原生

智能导向的用户钱包画像分析:揭秘 NFT 市场的秘密

Footprint Analytics

NFT 加密钱包

体育直播系统源码提供哪些安全购买保障策略

软件开发-梦幻运营部

软件测试/测试开发/全日制/测试管理丨Vue 访问 api 组件-axios

测试人

软件测试

API设计:从基础到优秀实践

高端章鱼哥

API

货拉拉智能监控实践:如何解决多云架构下的故障应急问题?

TakinTalks稳定性社区

期待!《数字化运维路线图》震撼发布(第一部分)

博睿数据

化作乾坤万里春:openGauss跨越生态拐点之后,改变了什么?

脑极体

数据库 自主化

市场动态:在比特币 ETF 投机和摄氏度网络向挖矿转型的背景下,2024 年将保持稳定开局

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Web API的版本控制方案分析_REST_Dilip Krishnan_InfoQ精选文章