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