来自于一两个简单的问题,总结如下:
* 如果超媒体作为应用程序状态引擎: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
发现很不错就翻译了,翻译的不好,多包涵。
分享到:
相关推荐
3. **序列化**:库支持多种序列化器(如JsonApi, JsonHal, Problem+Json等),将对象转换为适合传输的格式,同时包含Hateoas链接和关系。 4. **链接工厂**:通过链接工厂,开发者可以便捷地创建链接,而无需每次都...
我们为每个文件夹都有单独的文件夹:Spring HATEOAS模块-在代码内部以及使用标准工具从外部在基于超媒体的服务上戳和戳-以最简单的方式使用Spring HATEOAS。 升级现有的REST资源-创建超媒体驱动的REST资源,将它们...
HATEOAS是什么? HATEOAS代表“超媒体是应用程序状态的引擎”。从前言我们已经可以清楚知道,使用HATEOAS约束是REST风格中成熟度最高的,也是官方推荐的一种方式。在Spring的官网,已经有提供这个项目的相关文档,...
什么是hateoas-client.js? hateoas-client.js是一个库(用于浏览器+ nodejs),用于与RESTful服务进行通信。 它使用jQuery作为ajax库。 目的是提供一个非常简单的API来遵循请求响应中定义的links ,从而在...
4. 创建资源_representation_类:创建一个资源_representation_类,例如 UserRepresentation 类,用于将用户信息转换为超媒体形式。 ``` public class UserRepresentation extends ResourceSupport { private Long ...
通过一种方法将HATEOAS HAL链接转换为应用程序可以使用的URL。 处理缺少的链接,并将模板化的链接选项转换为查询字符串参数。 它与 HAL层完全兼容。 安装 npm install hateoas-hal-link-resolver 用法 Resolver是...
`go-hateoas` 是一个专为 Golang 设计的轻量级 Hypermedia Application Language (HAL) 框架。HAL 是一种在 RESTful API 中使用链接来增强资源表示的标准,使得客户端能够更容易地发现和理解服务端提供的功能。`go-...
描述中提到的"帽子"可能是“HATEOAS”的中文缩写,同时提到了评估过程是在某种帮助下进行的,但没有具体说明是什么帮助。这可能暗示项目中使用了一些工具、框架或指南来辅助HATEOAS的评估。 标签为"JavaScript",这...
Ketting-javascript的HATEOAS客户端转到获取完整文档。介绍Ketting库是具有Hypermedia功能的通用REST客户端。 该库可与任何基于JSON的HTTP API一起使用,但是当将其与支持链接的格式一起使用时,它具有超强的能力,...
Spring-Hateoas为Spring MVC和Spring WebFlux提供了方便的库,帮助开发者轻松构建符合HATEOAS原则的REST服务。它提供了`EntityModel`、`Resource`、`Resources`等类,用于包装领域模型并添加链接信息。此外,`Link`...
漫步者HATEOAS集成测试Restwalker是用于使用HATEOAS超链接对RESTFUL服务进行集成测试的工具。 它使用DSL通过相关名称描述服务的遍历。服务沃克服务沃克接受一系列命令(可以是字符串,函数或数组),并使用这些命令...
Spring Hateoas为RESTful API提供了强大的支持,而React.js则是一种用于构建用户界面的JavaScript库,尤其擅长构建可复用的组件。下面我们将深入探讨这两个技术的结合及其应用。 ### Spring Hateoas简介 Spring ...
4. **资源处理器**(ResourceAssembler):这些组件负责将业务对象转换为HATEOAS的Resource对象,添加链接并返回给客户端。 5. **链接构建**:项目中会包含示例代码,展示如何使用LinkBuilder或...
由于所有提交均以其github问题为标题,因此git会将其视为注释。 要解决此问题,请将以下配置应用于克隆: git config core.commentchar "/" 发布 创建一个新版本(在主分支上)。 % ci/create-release.sh ...
在电子商务领域,RESTful API设计是构建可扩展、灵活且易于维护的Web服务的重要方法。...通过合理设计和实现这些端点,可以为电子商务应用创建出高效、可扩展的后端服务,满足用户不断变化的需求。
但是,它仍然不是完全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 Data REST与Spring HATEOAS简介** Spring Data REST是一种构建RESTful服务的扩展,它使得基于Spring Data JPA的存储库能够自动暴露为HTTP资源。它利用了HATEOAS(超媒体作为应用程序状态的引擎)概念,...