REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。翻译过来就是"表现层状态转化。”
Roy Thomas Fielding在论文中将REST定位为“分布式超媒体应用(Distributed Hypermedia System)”的架构风格,它在文中提到一个名为“HATEOAS(Hypermedia as the engine of application state)”的概念。
如果一个架构符合REST原则,就称它为RESTful架构
![]()
REST level
理解RESTful架构
综上所述
RESTful架构可以总结成以下3点
1、每个URL代表一种资源
2、客户端和服务器之间,传递这种资源的某种表现层;
3、客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"
超媒体作为应用程序状态引擎(HATEOAS)是REST应用程序体系结构的一个组件,它将其与其他网络应用程序体系结构区分开来。
使用HATEOAS,客户端与网络应用程序交互,其应用程序服务器通过超媒体动态提供信息。除了对超媒体的一般理解之外,REST客户端几乎不需要知道如何与应用程序或服务器交互。
HATEOAS约束将客户端和服务器分离的方式使服务器功能能够独立发展。
示列
REST客户端通过简单的固定URL进入REST应用程序。客户端可能采取的所有未来操作都在服务器返回的资源表示中发现。用于这些表示的媒体类型以及它们可能包含的链接关系是标准化的。客户端通过从表示中的链接中进行选择或通过以其媒体类型提供的其他方式操纵表示来转换应用程序状态。通过这种方式,RESTful交互由超媒体驱动,而不是带外信息。
列如以GET请求获取账户资源,以XML表现形式请求详细信息:
GET /accounts/12345 HTTP/1.1
Host: bank.example.com
Accept: application/xml
...
响应是:
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ...
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="https://bank.example.com/accounts/12345/deposit" />
<link rel="withdraw" href="https://bank.example.com/accounts/12345/withdraw" />
<link rel="transfer" href="https://bank.example.com/accounts/12345/transfer" />
<link rel="close" href="https://bank.example.com/accounts/12345/status" />
</account>
响应包含以下可能的后续链接:进行存款,取款或转账,或关闭账户。
稍后检索帐户信息时,帐户会透支:
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ...
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="https://bank.example.com/accounts/12345/deposit" />
</account>
现在只有一个链接可用:存入更多钱。在当前状态下,其他链接不可用。因此,术语引擎应用状态。可能的操作因资源状态的不同而有所不同。
客户端不需要了解服务器提供的每种媒体类型和通信机制。通过服务器提供给客户端的“ 按需代码 ”,可以在运行时获取理解新媒体类型的能力
参考链接:
https://en.wikipedia.org/wiki/HATEOAS
http://www.ruanyifeng.com/blog/2011/09/restful.html
https://elf8848.iteye.com/blog/379125
Introduction of RESTful level & HATEOAS
原文:https://www.cnblogs.com/qqq-65536/p/10925782.html