NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:294692
用户头像

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

关注

评论

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

【LeetCode】合并区间Java题解

Albert

LeetCode 8月月更

创建第一个 Cypress 应用后使用命令行 npx Cypress open 报错的原因分析

Jerry Wang

前端开发 自动化测试 Cypress web开发 8月月更

企业数字化转型,如何实现业务部门与算法部门共同探索模型开发优化

ModelWhale

数据分析 工作流 数字化转型 业务思维 协同开发

PingCode 权限系统设计与实现

PingCode研发中心

权限系统

从InfluxDB到TDengine,阳光氢能为什么会做出这个选择?

TDengine

数据库 tdengine 时序数据库

什么是公共云、私有云、混合云、社区云,四者分别有啥区别?

wljslmz

云计算 8月月更

Web3 的通行证——DID 带来数字身份革命

One Block Community

基于高效采样算法的时序图神经网络系统(一)

Baihai IDP

人工智能 神经网络 深度学习 图数据

“副业焦虑”席卷Z世代,今天你的副业失败了吗?

博文视点Broadview

芯声智能亮相亚洲智能穿戴展,智能头盔声学方案为骑手保驾护航

硬科技星球

使用 OpenTelemetry 零代码修改接收 SkyWalking 追踪数据

Daocloud 道客

云原生 可观测性 Skywalking OpenTelemetry

产品和管理必备技能 Top 5

宇宙之一粟

产品 领导力 8月月更

封仲淹:OceanBase社区版4.0未来畅想

OceanBase 数据库

机器学习服务文本翻译能力升级,中文直译模型让译文表达更地道!

HMS Core

企业如何将自身的数字技术及研究成果快速对外发布应用

ModelWhale

数字化转型 部署 应用模型 对外接口 协同开发

2022 OceanBase数据库大赛开启,30W奖金等你来拿!

OceanBase 数据库

企业如何跨部门实现模型应用全生命周期管理

ModelWhale

数字化转型 应用模型 迭代管理 跨部门沟通 算法模型

「数澈软件」获5300万元种子轮融资,构建新一代软件供应链防火墙

SEAL安全

软件供应链安全

Go-Excelize API源码阅读(十七)——GetPageLayout、SetPageMargins

Regan Yue

Go 开源 源码解析 8月日更 8月月更

ModelBox开发体验:使用YOLOv3做口罩检测

华为云开发者联盟

人工智能 ModelBox

Curve Testing Camp Time|万元大奖等你来拿!

张慧

分布式存储 curve

灵活多样认证授权,零开发投入保障IoT安全

EMQ映云科技

安全 物联网 认证授权 emqx 8月月更

一次客户需求引发的K8S网络探究

京东科技开发者

k8s 中台架构 #k8s K8s 多集群管理 数据库·

收到面试通知后,如下的准备可以大大提升面试成功率

TimeFriends

8月月更

易周金融分析 | Q2手机银行活跃用户环比增长2.17%

易观分析

金融 手机银行

企业分账如何帮助用户解决成本优化和预算分配的问题

阿里巴巴中间件

阿里云 Serverless 云原生 SAE

为什么 DevOps 会失败?

SoFlu软件机器人

云原生数据库白皮书,发布!

华为云开发者联盟

数据库 云原生 后端 华为云 白皮书

精妙绝伦!10年阿里工作经验总结出这份亿级高并发系统设计手册,真的太强了!

退休的汤姆

Java、 面经 社招 Java工程师 秋招

J2EE进阶(三)struts2 <s:action>标签的用法及Spring在web.xml中的配置

No Silver Bullet

spring Struts2 8月月更 <s:action>

动态尺寸模型优化实践之Shape Constraint IR Part II

阿里云大数据AI技术

深度学习 编译器 优化

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