为什么HATEOAS?
来自于一两个简单的问题,总结如下:
* 如果超媒体作为应用程序状态引擎:Hypermedia as the Engine of Application State (HATEOAS) 这么酷,为什么没有被今天的更多REST API使用。
* 伴随着适应变化能力的长期好处,有没有什么短期的回报?
我十分清楚你为什么会问这些问题。。。我在之前也有这样的疑问。在过去几年,我设计过很多REST的API,直到我最近设计的一个才发生了改变,我使用“典型”的方式设计和写文档,描述程序的URI结构并且让客户端找出何时发送什么。我最近的工作是参与设计SUN云计算API去控制虚拟机之类的。作为附加工作,我化很大精力在编写客户端API的多种语言(Ruby,Python,Java...)绑定,所以我获得了针对这个API进行编程的非常直接的第一手的感受。
我们从假定这些服务只公布 一个 对外发布的URI(返回一个云表述包含所要表述的内容,并且/或者链接到所表述内容的URI,所有的可以被当前用户访问的云资源)。整个系统中的所有其他 URI(包含所有会发生状态改变的)都是从分析这些表述中获得的。即使还只是在早期,我也能看到我们从采取这种方法上获得的一些重要的,务实的,短期的好处。
* 降低客户端编程错误。 回顾所有我或者我参与设计的REST客户端接口,大约90%的bug出现在构建正确的服务器交互URI上。典型的错误有漏掉部分路径,错误的路径顺序或者忘记了URL编码等。当服务器在任何情况下都给你了正确的URI时,所有这些都会消失。
* 降低无效的状态迁移请求。 当客户端决定什么时候请求什么URI时,就有风险会尝试发起在服务器端资源的当前状态无效的请求。我的情况下的一个例子。。。除非你“deploy(部署)”了一个虚拟机(VM)否则是不能"start(启动)"他的。服务器知道发起每个状态改变的URI(通过POST),但是虚拟机列表的表述(representation,不理解的看REST的文档,可以简单理解为这一时刻返回的内容)只有当前状态下有效的状态变迁请求的URI。这使客户端非常容易理解“start”一个还没有“deploy”的虚拟机是不被允许的,因为虚拟机的表述里面就没有对应的URI。
* 渐进试改进并且不破坏(非必要的)旧客户端。 在任何一个给定时间,任何REST API的客户端都是基于系统能做什么的 一些 假设编程的。但是,如果确定一个限制--“只关注你所知道的表述的这些方面”,加上服务器端严格控制后加的功能不破坏之前的行为,你可以合理快速的改进 API而不破坏所有客户端,否则你不得不在你的服务器上同时维护多个版本的API。你不需要花费多年等待回报:-)特别是使用版本(在WSDL中)管理表述的格式的SOAP,你不得不在每次修改时处理和客户端相关的麻烦。
现在陶醉在HATEOAS中,很难在回到之前的方式了。
-----------------------------------------------------------------------华丽的分割线-------------------------------------------------------------------------
原文章地址http://blogs.sun.com/craigmcc/entry/why_hateoas
发现很不错就翻译了,翻译的不好,多包涵。
为什么HATEOAS?相关推荐
- RESTful Levels HATEOAS
1. 什么是RESTful REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.翻译过来就是"表现层状态转化." REST是一种软件架构风格. ...
- HATEOAS REST Service
用户通过点击页面的href的链接地址,而跳转到其他网页,实现浏览网页的过程了. -> 让调用REST的api就可以实现,类似于用户浏览网页的从一个页面跳转到另外一个页面的过程了 -> 而这 ...
- 使用 Spring HATEOAS 开发 REST 服务--转
原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/index.html?ca=drs-&utm_source ...
- 架构之:REST和HATEOAS
文章目录 简介 HATEOAS简介 HATEOAS的格式 HATEOAS的Spring支持 总结 简介 我们知道REST是一种架构方式,它只是指定了六种需要遵循的基本原则,但是它指定的原则都比较宽泛, ...
- 用ASP.NET Core 2.1 建立规范的 REST API -- HATEOAS
本文所需的一些预备知识可以看这里: 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 和 用ASP.NET Core 2.0 建立规范的 REST API -- 预 ...
- 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API
上一篇写的是使用静态基类方法的实现步骤: 使用dynamic (ExpandoObject)的好处就是可以动态组建返回类型, 之前使用的是ViewModel, 如果想返回结果的话, 肯定需要把View ...
- 使用静态基类方案让 ASP.NET Core 实现遵循 HATEOAS Restful Web API
Hypermedia As The Engine Of Application State (HATEOAS) HATEOAS(Hypermedia as the engine of applicat ...
- 突然讨厌做前端,讨厌代码_不要讨厌HATEOAS
突然讨厌做前端,讨厌代码 或我如何学会不再担心和爱HATEOAS REST已成为实现Web服务的事实上的解决方案,至少已成为一种流行的解决方案. 这是可以理解的,因为REST在使用HTTP规范时提供了 ...
- jax-ws和jax-rs_使用JAX-RS和Spring构建HATEOAS API
jax-ws和jax-rs 在我以前的博客文章中,我展示了如何使用Spring Boot配置Jersey多么容易. 我对Spring Boot和Jersey的探索并未结束,我研究了在Spring Bo ...
- HATEOAS的RESTful服务。 记录超媒体API
1.简介 希望本教程的前一部分不仅揭示了超媒体和HATEOAS的深远影响,而且使我们确信这些都是RESTful Web服务和API的基本构建块. 在这一部分中,我们将继续侧重于文档方面,以解决如何预先 ...
最新文章
- 2015_8_21作业——有自翻译有复制他人的英语太差
- 金山词霸2009牛津版
- SendEmail使用TLS发送邮件
- Python--day46--MySQL视图
- thinkphp5如何使用layout
- mysql与jmeter环境变量配置_Java开发技术大杂烩(一)之Redis、Jmeter、MySQL的那些事...
- csplit 分割文件
- Python 开发工具集:关于文档、测试、调试、程序的优化和分析
- 【软考】(五)网络互联设备
- hdu Hike on a Graph
- overleaf官网登录注册报错:Sorry, we could not verify that you are not a robot.
- Spring Security 单点登录系统
- android qq聊天界面键盘与布局,大屏手机单手聊天 QQ输入法浮动键盘做得到
- 小三拆散原配上位结婚 因丈夫偷情将其捅死
- 软件测试基础-今日②问-4
- 68个单位134项 | 2020年国家自然科学基金专项项目立项名单发布
- RxFFmpeg: Android Error while decoding stream #0:0: Invalid data found when processing input
- 2019秋招|已拿BAT等7家offer大佬的秋招总结建议
- 计算机组装与维修2试卷,《计算机组装与维修》期末试卷(A) (2)
- 在ModelSim中添加Xilinx仿真库