QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

超媒体 API 引发的 REST 生存危机

  • 2014-04-04
  • 本文字数:2054 字

    阅读完需:约 7 分钟

几周以前,软件开发者 Evan Cordell API-Craft 邮件组中引发了一场对话,就关于 REST 在超媒体方面的约束,与常见 Web API 需求之间如何存在分歧进行了讨论。

在讨论“REST 的生存危机(RESTisential crisis)”话题的时候,Cordell 注意到,经过数年之久的辩论和实践,REST 风格终于开始透露出它藏得最深的秘密——超媒体约束。尽管 Web 证明了 REST 风格完美适用于人类驱动的交互,但对于它在一般性可编程 Web API 方面的效用的担心,在 Web API 社区中却似乎在不断上升。

在这场讨论中,他首先给出了 REST 的描述,以及在面向特定领域 Web API 时超媒体的制约,接下来考虑了对其他架构风格的需求,选用 REST 中最好的部分,并替换掉其中的一些约束,以获得不同的价值,例如有效和可靠的 M2M(Machine-to-Machine)通讯。

讨论中所列出的主要担忧,涉及了不同的途径,用来应对接口随着时间推移而产生的变更。第一套解决方案要求并行运行若干 API 版本,甚至若干 API 编配以用于特定客户端体验,例如Netflix 所展示的做法。其灵活性方面则需要面对设计和运营方面的重大挑战。

第二个解决方案要求预先投入更多的努力,来设计一套更易于应对变化的RESTful 超媒体API,并限制对客户端的影响——就像HTML 浏览器和服务器的工作和演进那样。但部分讨论参与者(特别是Web 工程师 Mike Kelly )对此表达了自己的担心,主要集中在实现该方案涉及的复杂度和 API 使用者需要承担的额外负担方面。以下是讨论摘要,包括对 Evan 最初帖子内容和章节标题的摘录:

1) 好的 API 不会发生变化

  • 考虑一下 Joshua Bloch 在设计公共 Java API 方面的经验,我们似乎可以认为,相同的规则也可以运用到可编程 Web API 上。
  • API 是遵循外观模式的接口,面向客户端的部分不应该发生变化。然而,可以将多重或演进的实现(包括运行时数据)暴露出来,而无须改变 API 约定。

2) 版本管理不起作用

与“传统”API 相比,“Web API”公开出来的内容要多得多。它暴露出数据;而且对于持续变化数据的大型集合,它通常还会把其当前状态公之于众。那么,当我们的领域模型拥有两个版本,它们共享部分数据子集但使用不同方式访问的时候,该如何有效的进行版本管理?这会强迫客户端发生分裂。

  • 超媒体能够帮助 API 演进并变得不那么脆弱,但是如果数据和领域模型发生根本性改变,那么在没有开发者人工介入的情况下,客户端将无法自动适配这些变动。

3) 超媒体毁掉了资源定位

  • REST 阻止了来自客户端的固定 URI 和任何关于服务器资源的先验知识。在实践中,保存了 URI(例如书签)和服务器的客户端,需要处理其 URI 空间的演变(重定向)。
  • 超媒体无法将 API 提供者与 API 使用者的惰性行为隔离开,后者将不会遵循恰当的超媒体流,而是直接针对目标资源和 URI。
  • 由于超媒体 API 往往非常复杂,难以理解和使用,所以开发者将必然会优化其客户端并采用捷径——而这将会使为了将 API 变更与客户端隔离的所有努力化作泡影。

4) 对人类用户来说,超媒体富有意. 义;但对机器则并非如此

  • 机器并不善于处理随时间推移发生的变化,相反人类则非常擅长解读变更并决定下一步想要做什么。超媒体与人类在本质上非常贴近,而对机器来说这意味着相当程度的隔阂。
  • 领域模型方面的变动,要求客户端使用它的方式也发生改变,超媒体并没有对此采用什么特别的手法。

一个真正的 REST/ 超媒体客户端,其实是人机交互(HCI)的一种形式,而不是 API。(或者说,是 AHI——应用与人交互)。

5) 带外数据究竟有什么坏处?

  • API 是否真的有必要天生可发现?
  • 当 API 响应的格式具有高度复杂性、难以阅读的时候,API 凭什么应该具有自我说明性(self documenting)?
  • 真正易于阅读的材料应该是:组织结构精妙的 HTML、由浏览器渲染、具有交互式例子和清晰的描述。

6) 超媒体 API 与 WADL 真的不一样吗?

可发现的超媒体 API 有什么不同?“HAPI”看上去就像是一套 WADL 弥漫其中的 API。我们依旧必须从单独一个端点开始,依旧必须了解基于其响应,我们可以用 API 干什么。

  • 其中部分必须具有领域模型的描述,而它们还将随时间推移发生改变。

7) Web 的模拟

  • 假定这样一个场景:在原生移动应用中使用 REST API,我们拥有两门语言(Android ML 和 iOSMLS,分别拥有所需的代码);
  • 使用针对特定领域的超媒体媒体类型,依旧需要编写能够理解这一领域的客户端代码。

8) 关于 REST,有哪些是真正的优点?

  • 除了超媒体和文档网(Web of documents)外,REST 还提供:

    • 强制要求无状态服务器,从而使其易于扩展
    • 鼓励通过资源将信息解耦合

基础内容非常简单,我们可以与服务器以语义上富有意义的方式进行对话,而且只需要在所有平台和语言中包含 http 库即可。

以上摘要包含了对若干讨论参与者回复内容的摘抄,特别是 Evan Cordell,以及 Mike Amundsen、Jorn Wildt 和 Mike Kelly。作为免责声明,需要指出的是,本文作者也在开始阶段参与了这场讨论。

从自身的经验来看,各位读者是否认为我们需要更好地区分 REST 和 Web API 架构风格,区分人类驱动超媒体和 M2M 通讯的使用案例?

查看英文原文: RESTistential Crisis over Hypermedia APIs

2014-04-04 03:303236
用户头像

发布了 256 篇内容, 共 77.2 次阅读, 收获喜欢 10 次。

关注

评论

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

2022年石家庄等保测评公司名单(排名部分先后)

行云管家

网络安全 等保 等保测评 石家庄

政法委重点人员联防联控系统开发,重点人群管理服务平台建设

a13823115807

从事【音视频】的开发者,看过来,如果记不住FFmepg命令,可以收藏,不记得的时候,掏出来翻翻

奔着腾讯去

c 音视频 ffmpeg

VuePress 博客优化之 last updated 最后更新时间如何设置

冴羽

JavaScript Vue 前端 博客 vuepress

基于STM32设计的数字电子秤

DS小龙哥

C语言 嵌入式 单片机

CRM系统的六大优势

低代码小观

低代码 CRM 客户关系管理 CRM系统 客户关系管理系统

涨薪密码 | 音视频开发-程序员界的技术皇冠

Yt

音视频 WebRTC ffmpeg 流媒体 SRS流媒体服务器

微信小程序与webview关于iphone X的兼容设置

CRMEB

阿里云「低代码音视频工厂」正式上线,为企业用户打造音视频应用开发最短路径

阿里云CloudImagine

音视频 低代码 开发

年度盘点丨2021数字化转型优秀案例TOP10

ToB行业头条

谁说操作系统没有创新,这里就有一个,还是分布式的

LAXCUS分布式操作系统

QCon-OPPO大规模CV预训模型技术及实践

安第斯智能云

算法 计算机视觉 预训练模型

Hoo虎符研究院 | 币海寻珠——2021年4季度区块链投融事件TOP20

区块链前沿News

Hoo虎符 虎符交易所 虎符研究院 区块链投融 灰度基金

MongoDB高级应用之数据转存与恢复(5)

Tom弹架构

Java 分布式数据库mongodb

项目经理如何有效管理项目进度?项目管理3大常见问题及解决方案

优秀

项目管理 项目管理工具

如何修改Kestrel上传文件的大小

喵叔

1月月更

如何用建木CI部署k8s资源

Jianmu

Kubernetes DevOps CI/CD 开源项目

粤、蒙、沪同步试点全电发票,数字化转型思路你拿捏了吗?

金小K

云智慧运维管理平台OMP荣获OSC中国开源项目评选「最受欢迎项目」奖

云智慧AIOps社区

开源项目 运维工程师 运维监控 自动化运维 运维管理

跨越2021丨在逐梦中星夜兼程,在前行中不忘初心

YonBuilder低代码开发平台

低代码

你了解集合?那你倒是给我说说啊!【3】

XiaoLin_Java

集合 java基础 1月月更

Hoo虎符研究院 | 币海寻珠——即将初始发行Token区块链项目

区块链前沿News

Hoo 虎符交易所 初始发行

安全架构要参:构建企业适用的安全架构

I

安全架构 企业安全

低代码平台对程序员有哪些好处?

J2PaaS低代码平台

CVE-2021-32682 elFinder RCE 简单分析

H

网络安全 安全漏洞

Flutter 压缩图像的最佳方式

坚果

flutter 1月月更

采购堡垒机时候,选择开源堡垒机还是云堡垒机?

行云管家

云计算 网络安全 等保 堡垒机

低代码实现探索(十二)vue.config.js模块打包

零道云-混合式低代码平台

洞态漏洞检出测试第二期:NoSQL & LDAP注入漏洞

火线安全

DevSecOps WEB安全 安全漏洞

为什么企业组织更愿意选择内部私有的IM,而不使用钉钉、微信等软件?

BeeWorks

软件定义存储的头部厂商也来了,XSKY 星辰天合加入龙蜥社区

OpenAnolis小助手

龙蜥社区

超媒体API引发的REST生存危机_语言 & 开发_Jerome Louvel_InfoQ精选文章