来自于一两个简单的问题,总结如下:
* 如果超媒体作为应用程序状态引擎: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
发现很不错就翻译了,翻译的不好,多包涵。
分享到:
相关推荐
我们为每个文件夹都有单独的文件夹:Spring HATEOAS模块-在代码内部以及使用标准工具从外部在基于超媒体的服务上戳和戳-以最简单的方式使用Spring HATEOAS。 升级现有的REST资源-创建超媒体驱动的REST资源,将它们...
什么是hateoas-client.js? hateoas-client.js是一个库(用于浏览器+ nodejs),用于与RESTful服务进行通信。 它使用jQuery作为ajax库。 目的是提供一个非常简单的API来遵循请求响应中定义的links ,从而在...
通过一种方法将HATEOAS HAL链接转换为应用程序可以使用的URL。 处理缺少的链接,并将模板化的链接选项转换为查询字符串参数。 它与 HAL层完全兼容。 安装 npm install hateoas-hal-link-resolver 用法 Resolver是...
Ketting-javascript的HATEOAS客户端转到获取完整文档。介绍Ketting库是具有Hypermedia功能的通用REST客户端。 该库可与任何基于JSON的HTTP API一起使用,但是当将其与支持链接的格式一起使用时,它具有超强的能力,...
漫步者HATEOAS集成测试Restwalker是用于使用HATEOAS超链接对RESTFUL服务进行集成测试的工具。 它使用DSL通过相关名称描述服务的遍历。服务沃克服务沃克接受一系列命令(可以是字符串,函数或数组),并使用这些命令...
由于所有提交均以其github问题为标题,因此git会将其视为注释。 要解决此问题,请将以下配置应用于克隆: git config core.commentchar "/" 发布 创建一个新版本(在主分支上)。 % ci/create-release.sh ...
但是,它仍然不是完全DDD,因为为简单起见,我将JPA Entity批注放到Domain类中。超媒体和配置文件HAL是一种相当轻量级的超媒体格式。 至少与超媒体控件有关。 使用HAL,您无法真正表示客户端是否应
·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、...
灰烬hat 本自述文件概述了在此Ember插件上进行协作的详细信息。... 访问您的应用程序,为 。 运行测试 ember test ember test --server 建造 ember build 有关使用ember-cli的更多信息,请访问 。
您将使用Spring HATEOAS构建超媒体驱动的REST服务:一个API库,可用于创建指向Spring MVC控制器的链接,建立资源表示并控制如何将它们呈现为受支持的超媒体格式(例如HAL) )。 该服务将通过接受HTTP GET请求。 ...
带有Spring Framework的Demo API Rest Java,特别是Spring Data Rest模块,该模块自动结合了Spring HATEOAS和Spring Data JPA的功能,Spring HATEOAS和Spring Data JPA为我们提供了多种功能,这次将其连接到MySQL...
关于authadmin authadmin为authserver提供管理API服务。 它使用弹簧启动器:休息,数据和阴影。 authserver提供身份验证和授权服务。 它在oauth2客户端上实现了缓存令牌服务,令牌代理服务和令牌撤销服务。怎么跑...
我为您的REST Flask应用程序提供了规范的轻松集成。 这是戴夫(Dave)的例子... # Third Party Libs from flask import Flask # First Party Libs from flask_hal import HAL , document app = Flask ( __name__...
该项目的目的是学习REST,这就是为什么该项目被分成多个分支,并且各个阶段的进度不同。 只是我们的REST资源的类图和路由。 代表应用程序数据的所有模型(POJO)。 MongoDB的持久层。 定义资源,服务和API接口的...
本书涵盖了为什么需要高质量的API来进行企业集成。 本书涵盖以下激动人心的功能: 探索RESTful概念,包括URI,HATEOAS和按需编码 研究无状态,分页和可发现性等核心模式 使用API网关优化链接微服务的端点 ...
我为什么要使用restfulie? 1.简单->编写基于超媒体感知资源的客户端2.轻松—>基于超媒体感知的基于资源的服务3.小→这不是一个庞大的解决方案,具有大量的API 4. HATEOAS —>您不知道的客户端,即使您更改URI也不会...
精益看板系统,以看板方法为核心,内嵌精益思想,研发过程中覆盖了丰富的技术实践。 系统在设计上服务端与客户端独立演进。 基础技术点: spring-boot spring-hateoas mybatis+mysql HSQL RSA Gradle Liquibase ...
休息演示功能 基于Spring-boot和Jersey的REST服务展示了很多东西,这是... 客户端不关心具体原因,即为什么不存在链接。 因此,服务器不必公开逻辑,因此可以更改逻辑。 功能切换和链接生成仅在我们的链接构建框架中
许多博客和论文为该策略中的内容提供了基础。 此策略中的建议只是“建议”。 背景 什么是API? 应用程序编程接口(API)是一种规范,旨在被软件组件用作相互通信的接口。 什么是REST? REST是一组原则,用于定义...
为什么是超媒体? 正如您在一书的序言中所读到的: 超媒体 API 包含使 Web 变得伟大的原则:灵活性、标准化以及与任何给定服务的松散耦合。 它们考虑的系统设计原则,但使用了较少的系统理论术语。 超媒体设计...