Representational State Transfer(REST):
是一种软件架构风格,它定义了一组用于创建Web服务的约束。符合REST架构风格的Web服务(称为RESTfulWeb服务(RWS))提供Internet上计算机系统之间的互操作性。RESTful Web服务允许请求系统使用统一且预定义的无状态操作集来访问和操作Web资源的文本表示。其他类型的Web服务(如SOAP Web服务)会公开自己的任意操作集。
Web资源”首先在万维网上定义为由其URL标识的文档或文件。然而,今天它们有一个更通用和抽象的定义,包含可以在Web上以任何方式识别,命名,寻址或处理的每个事物或实体。在RESTful Web服务,对资源的的请求URI将引发一个响应有效载荷在格式化的HTML,XML,JSON或其它格式。响应可以确认已对存储的资源进行了一些更改,并且响应可以提供超文本链接到其他相关资源或资源集合。当使用HTTP时,最常见的是,可用的操作(HTTP方法)是GET,HEAD,POST,PUT,PATCH,DELETE,CONNECT,OPTIONS和TRACE。
通过使用无状态协议和标准操作,RESTful系统旨在通过重用可以管理和更新的组件来实现快速性能,可靠性和增长能力,即使在运行时也不会影响整个系统。
- 由持久性标识符标识的资源:URI是当今无处不在的标识符选择
- 资源使用一组共同的动词被操纵:HTTP方法是常见的情况-古老
Create
,Retrieve
,Update
,Delete
变POST
,GET
,PUT
,和DELETE
。但REST不仅限于HTTP,它现在只是最常用的传输方式。 - 为资源检索的实际表示取决于请求而不是标识符:使用Accept标头来控制是否需要XML,HTTP,甚至是表示资源的Java对象
- 维护对象中的状态并表示表示中的状态
- 表示资源表示中资源之间的关系:对象之间的链接直接嵌入表示中
- 资源表示描述了如何使用表示以及在什么情况下应该以一致的方式丢弃/重新获取表示:HTTP Cache-Control头的
HATEOAS :
HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,使得客户端可以更加智能和自适应,而 REST 服务本身的演化和更新也变得更加容易。
在介绍 HATEOAS 之前,先介绍一下 Richardson 提出的 REST 成熟度模型。该模型把 REST 服务按照成熟度划分成 4 个层次:
- 第一个层次(Level 0)的 Web 服务只是使用 HTTP 作为传输方式,实际上只是远程方法调用(RPC)的一种具体形式。SOAP 和 XML-RPC 都属于此类。
- 第二个层次(Level 1)的 Web 服务引入了资源的概念。每个资源有对应的标识符和表达。
- 第三个层次(Level 2)的 Web 服务使用不同的 HTTP 方法来进行不同的操作,并且使用 HTTP 状态码来表示不同的结果。如 HTTP GET 方法来获取资源,HTTP DELETE 方法来删除资源。
- 第四个层次(Level 3)的 Web 服务使用 HATEOAS。在资源的表达中包含了链接信息。客户端可以根据链接来发现可以执行的动作。
从上述 REST 成熟度模型中可以看到,使用 HATEOAS 的 REST 服务是成熟度最高的,也是推荐的做法。对于不使用 HATEOAS 的 REST 服务,客户端和服务器的实现之间是紧密耦合的。客户端需要根据服务器提供的相关文档来了解所暴露的资源和对应的操作。当服务器发生了变化时,如修改了资源的 URI,客户端也需要进行相应的修改。而使用 HATEOAS 的 REST 服务中,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作。当服务器发生了变化时,客户端并不需要做出修改,因为资源的 URI 和其他信息都是动态发现的。