来自于一两个简单的问题,总结如下:

* 如果超媒体作为应用程序状态引擎: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?相关推荐

  1. RESTful Levels HATEOAS

    1. 什么是RESTful REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.翻译过来就是"表现层状态转化." REST是一种软件架构风格. ...

  2. HATEOAS REST Service

    用户通过点击页面的href的链接地址,而跳转到其他网页,实现浏览网页的过程了. -> 让调用REST的api就可以实现,类似于用户浏览网页的从一个页面跳转到另外一个页面的过程了 -> 而这 ...

  3. 使用 Spring HATEOAS 开发 REST 服务--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/index.html?ca=drs-&utm_source ...

  4. 架构之:REST和HATEOAS

    文章目录 简介 HATEOAS简介 HATEOAS的格式 HATEOAS的Spring支持 总结 简介 我们知道REST是一种架构方式,它只是指定了六种需要遵循的基本原则,但是它指定的原则都比较宽泛, ...

  5. 用ASP.NET Core 2.1 建立规范的 REST API -- HATEOAS

    本文所需的一些预备知识可以看这里:  用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 和  用ASP.NET Core 2.0 建立规范的 REST API -- 预 ...

  6. 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API

    上一篇写的是使用静态基类方法的实现步骤: 使用dynamic (ExpandoObject)的好处就是可以动态组建返回类型, 之前使用的是ViewModel, 如果想返回结果的话, 肯定需要把View ...

  7. 使用静态基类方案让 ASP.NET Core 实现遵循 HATEOAS Restful Web API

    Hypermedia As The Engine Of Application State (HATEOAS) HATEOAS(Hypermedia as the engine of applicat ...

  8. 突然讨厌做前端,讨厌代码_不要讨厌HATEOAS

    突然讨厌做前端,讨厌代码 或我如何学会不再担心和爱HATEOAS REST已成为实现Web服务的事实上的解决方案,至少已成为一种流行的解决方案. 这是可以理解的,因为REST在使用HTTP规范时提供了 ...

  9. jax-ws和jax-rs_使用JAX-RS和Spring构建HATEOAS API

    jax-ws和jax-rs 在我以前的博客文章中,我展示了如何使用Spring Boot配置Jersey多么容易. 我对Spring Boot和Jersey的探索并未结束,我研究了在Spring Bo ...

  10. HATEOAS的RESTful服务。 记录超媒体API

    1.简介 希望本教程的前一部分不仅揭示了超媒体和HATEOAS的深远影响,而且使我们确信这些都是RESTful Web服务和API的基本构建块. 在这一部分中,我们将继续侧重于文档方面,以解决如何预先 ...

最新文章

  1. 2015_8_21作业——有自翻译有复制他人的英语太差
  2. 金山词霸2009牛津版
  3. SendEmail使用TLS发送邮件
  4. Python--day46--MySQL视图
  5. thinkphp5如何使用layout
  6. mysql与jmeter环境变量配置_Java开发技术大杂烩(一)之Redis、Jmeter、MySQL的那些事...
  7. csplit 分割文件
  8. Python 开发工具集:关于文档、测试、调试、程序的优化和分析
  9. 【软考】(五)网络互联设备
  10. hdu Hike on a Graph
  11. overleaf官网登录注册报错:Sorry, we could not verify that you are not a robot.
  12. Spring Security 单点登录系统
  13. android qq聊天界面键盘与布局,大屏手机单手聊天 QQ输入法浮动键盘做得到
  14. 小三拆散原配上位结婚 因丈夫偷情将其捅死
  15. 软件测试基础-今日②问-4
  16. 68个单位134项 | 2020年国家自然科学基金专项项目立项名单发布
  17. RxFFmpeg: Android Error while decoding stream #0:0: Invalid data found when processing input
  18. 2019秋招|已拿BAT等7家offer大佬的秋招总结建议
  19. 计算机组装与维修2试卷,《计算机组装与维修》期末试卷(A) (2)
  20. 在ModelSim中添加Xilinx仿真库

热门文章

  1. 文档流及其特性 块级元素与行内元素的区别 浮动的清除方法(解决浮动塌陷)
  2. 【python系列】使用mayavi画3d散点图
  3. 新手做自媒体,最好掌握这4款视频制作软件
  4. 《Java SE实战指南》09:访问级别修饰符(Access level modifiers)
  5. Unity编码解析以及常用转换
  6. 导线中电流分布和集肤深度
  7. 检查内存泄露的利器--VLD使用指南
  8. MinGW中的头文件路径
  9. 七牛云上传图片并返回图片URL
  10. openpyxl中的load_workbook()函数