REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。翻译过来就是"表现层状态转化。”php
Roy Thomas Fielding在论文中将REST定位为“分布式超媒体应用(Distributed Hypermedia System)”的架构风格,它在文中提到一个名为“HATEOAS(Hypermedia as the engine of application state)”的概念。
若是一个架构符合REST原则,就称它为RESTful架构html
REST level服务器
理解RESTful架构restful
综上所述网络
RESTful架构能够总结成如下3点
一、每一个URL表明一种资源
二、客户端和服务器之间,传递这种资源的某种表现层;
三、客户端经过四个HTTP动词,对服务器端资源进行操做,实现"表现层状态转化"架构
超媒体做为应用程序状态引擎(HATEOAS)是REST应用程序体系结构的一个组件,它将其与其余网络应用程序体系结构区分开来。
使用HATEOAS,客户端与网络应用程序交互,其应用程序服务器经过超媒体动态提供信息。除了对超媒体的通常理解以外,REST客户端几乎不须要知道如何与应用程序或服务器交互。
HATEOAS约束将客户端和服务器分离的方式使服务器功能可以独立发展。app
示列分布式
REST客户端经过简单的固定URL进入REST应用程序。客户端可能采起的全部将来操做都在服务器返回的资源表示中发现。用于这些表示的媒体类型以及它们可能包含的连接关系是标准化的。客户端经过从表示中的连接中进行选择或经过以其媒体类型提供的其余方式操纵表示来转换应用程序状态。经过这种方式,RESTful交互由超媒体驱动,而不是带外信息。
列如以GET请求获取帐户资源,以XML表现形式请求详细信息:网站
GET /accounts/12345 HTTP/1.1 Host: bank.example.com Accept: application/xml ...
响应是:spa
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