写点什么

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

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

关注

评论

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

拼多多API接口:通过商品ID获取拼多多商品详情数据接口

tbapi

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

AI在商品计划领域的应用

第七在线

简析网络安全中的伦理困境与道德守则

我再BUG界嘎嘎乱杀

黑客 网络安全 信息安全 WEB安全 网安

苹果电脑防火墙Radio Silence for mac v3.2激活版 附安装教程

Rose

苹果电脑 mac防火墙 Radio Silence下载 Radio Silence破解版

实际上手体验maven面对冲突Jar包的加载规则

京东科技开发者

跨越边界:京东商品详情API的全球拓展之旅

代码忍者

Pushgateway:观测云中的实时数据监控解决方案

可观测技术

云原生

pdf reader pro mac破解版 v3.2.1.0中文激活版 好用的pdf编辑阅读器

Rose

macOS Big Sur(macos11 正式版)v11.2.3 高速下载版

Rose

OmniGraffle Pro mac破解版(流程图、组织结构图、网络拓扑图、电路图等)

Rose

思维导图 流程图 OmniGraffle Pro破解 OmniGraffle Pro下载

如何在 K8s 中实现 Pod 原地更新?

小猿姐

数据库 云计算 Kubernetes 云原生

AI入门之深度学习:基本概念篇

京东科技开发者

并发性能提升 4 倍!云帐房用 Serverless 轻松应对瞬时业务洪峰

阿里巴巴云原生

阿里云 Serverless 云原生

实时洞察,精准掌控:观测云在企业监控中的核心优势

可观测技术

监控

动态之美:Motion 5特效,让视频栩栩如生 mac版

Rose

mac视频后期特效处理 Motion 5破解版 Motion中文版

无缝集成,全域监控:观测云引领企业运维新纪元

可观测技术

运维

Luminar Neo:不只是修图,更是创意的孵化器

Rose

AE 2019中文版 after effects破解资源 mac/win

Rose

AE 2019中文版 AE 2019 mac破解版 AE2019安装包 After Effects安装教程

苹果电脑装机必备防休眠工具:InsomniaX for Mac中文版

Rose

MacBook防睡眠软件 InsomniaX for Mac

观测云:开放透明与知识共享的引领者

可观测技术

文档 开放生态

Waves 混音插件 完美破解版 for mac/win 安装包

Rose

Waves 混音插件 Waves破解版

7月新特性 | 软件开发生产线CodeArts发布多项新特性等你体验!

华为云开发者联盟

测试计划 代码检查 企业号 8 月 PK 榜 CodeArts 2024企业号8月pk

商品计划管理系统助力企业实现高效决策与资源配置

第七在线

课件ppt怎么做?3个在线网站轻松制作教学ppt!

职场工具箱

效率 职场 PPT 办公软件 AI生成PPT

怎么用云手机进行TikTok矩阵运营

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 tiktok矩阵

智能监控:超越传统阈值的监控

可观测技术

智能监控

京东小程序数据中心架构设计与最佳实践

京东科技开发者

如何构建高效的 CRUD 应用程序?

NocoBase

软件开发 crud crudapi

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