春争日,夏争时,扫码抽取夏日礼包!!! 了解详情
写点什么

在 RESTFul API 中使用 HATEOAS 的好处

  • 2009 年 4 月 24 日
  • 本文字数:901 字

    阅读完需:约 3 分钟

Sun 公司的 Craig McClanahan 为什么现有“REST”API 没有真正使用 RESTful 服务中的“超媒体即应用状态引擎(HATEOAS)”提供了答案。他从最近参与的 Sun 云计算 API 设计中举例说明了这样做的好处。

我们一开始假设服务只能发布一个众所周知的 URI(返回一个包含调用者可访问的云资源表示 [representation] 的表示,它也可以是一个 URI 链接)。通过检查这些表示就可以发现整个系统中的其他每个 URI(包括所有完成状态改变的 URI)。

Craig 建议通过资源图来让超媒体给客户端提供指导;通过把资源及其关系描述成指向它们的超媒体,可以让交互式的 Web 应用完成用户可以完成的工作;让客户端有效地浏览资源表示,驱动应用状态的改变。他认为,这样设计的好处是:

  • 降低客户端编码错误。大约 90% 的错误出现在为服务器构造正确 URI 的过程中。典型错误是遗漏路径片断(Path Segment),以错误的顺序获取它们,或者忘记 URL 编码的东西。
  • 减少无效的状态转换调用。[……] 举个例子 [出自云计算 API……],你只有“部署”了虚拟机(VM),才能去“启动”它。服务器知道 URI 发起了每次状态改变(通过 POST),但是 VM 的表示只罗列出了由当前状态可以有效转换的那些状态转变的 URI。
  • 无需破坏客户端就可进行细粒度演变。每次在编写 REST API 客户端时,都会对系统能做什么进行一些假设。但是,如果你仅记录那些“需要知道的表示内容”,再加上那些不会破坏先前行为的服务器端规定,你就能在不破坏所有客户端的情况下快速演变 API,或者在服务器上同时支持 API 的多个版本。

Marc Hadley 在他的帖子中对讨论进行了补充,提到可以使用 WADL 进行描述……

……一组 URI 和 URI 模板,依赖客户端去构建 URI 来访问它们需要的资源,云计算 API 只发布一个“根”URI,并记录下客户端可以在表示中哪个位置找到用来遍历服务的其他 URI。

他描述了一种对 Web 应用进行文档化的可能方式,如 Sun 云计算 API 使用 WADL ,并通过例子解释了其想法。

  1. 使用资源类型描述每种资源,
  2. 对表示进行参数化,以标识内嵌于它们中的链接
  3. 定义每个内嵌于链接标识中的资源类型。

请阅读原贴,并可在 rest 讨论组中进行讨论。

查看英文原文: Advantages Of (Also) Using HATEOAS In RESTFul APIs

2009 年 4 月 24 日 05:109158
用户头像

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

关注

评论

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

Java最前沿技术——ZGC

AI乔治

Java 架构 jdk ZGC JVM

iOS 面试策略之语言工具-Swift

iOSer

ios swift 面试

流量分析中常见的指标简单总结

五分钟学大数据

4月日更

太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏

互联网老辛

ansible

大数据-数据处理分类篇

进击的梦清

大数据 批处理 流式计算框架

ceph-csi源码分析(2)-组件启动参数分析

良凯尔

Kubernetes 源码分析 Ceph CSI

一次用户故事拆分分享

Bruce Talk

敏捷 Agile 用户故事 User Story

产品训练营第三周作业

innovator琳

产品

Golang 反射

escray

学习 极客时间 Go 语言 4月日更

Python OOP-2

若尘

面向对象 oop 面向对象编程 Python编程

微信读书又更新,吃灰已久的Pencil又能拿出来遛一遛了。

彭宏豪95

效率工具 读书 阅读 4月日更 微信读书

ceph-csi源码分析(1)-组件介绍与部署yaml分析

良凯尔

Kubernetes 源码分析 Ceph CSI

DAPP系统开发运营版,DAPP系统开发案例源码

系统开发咨询1357O98O718

介绍一款能取代 Scrapy 的爬虫框架 - feapder

星安果

Python 爬虫 Scrapy feapder

如何利用 Google 开源工具 Ko 在 kubernetes 建并部署 Go 应用

公众号:云原生Serverless

Kubernetes 云原生

内容平台与热点挖掘思考

程序员架构进阶

28天写作 4月日更 领域思考 内容平台

真的有那么丝滑吗?面试阿里(Java岗)从投简历到面试再到入职

互联网架构师小马

Java 面试 求职 阿里 找工作

高效获取信息的几点经验

彭宏豪95

效率 信息 阅读 4月日更

读书有用吗

孙苏勇

读书

浅析 Linux 中的 I/O 管理

赖猫

Linux

HZFE 快报002 / 比特币7年来首次跌破50天均线

HZFEStudio

大前端 金融科技 科技互联网 资讯

Go 的 UTF-8 实现

Rayjun

utf-8 Go 语言

Redis-Cluster集群

Sakura

4月日更

封神总结!12W字“多线程与高并发实战手册”成功助我涨薪19K

比伯

Java 程序员 架构

掉坑了!GROUP_CONCAT函数引发的线上问题

AI乔治

Java MySQL 架构 GROUPING运算符

基于NIO高性能、可扩展网络应用库:xSocket

六维

4月日更 xSocket

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

Java架构追梦

Java 阿里巴巴 架构 面试 金三银四

思维训练

Ryan Zheng

ARST-日常打卡3

pjw

关于读书的随想

小天同学

读书 4月日更

打通本地部署和公有云,混合云架构让“鱼”和“熊掌”兼得(一)

UCloud技术

混合云

在RESTFul API中使用HATEOAS的好处_SOA_Dilip Krishnan_InfoQ精选文章