"RESTful是一種軟件的架構風格、設計風格,爲客戶端和服務端的交互提供了一組設計原則和約束條件.
若是一個架構符合REST的約束條件和原則,那麼咱們將稱它爲RESTful架構.
@
***html
咱們在瀏覽器中能看到的每一個網站,都是一個web服務。那麼咱們在提供每一個web服務的時候,都須要先後端交互,先後端交互就必定有一些實現方案,咱們一般叫web服務交互方案。web
目前主流的三種web服務交互方案:
1. REST
(Respresentational State Transfer)表述性狀態轉移.
2. SOAP
(Simple Object Access Protocol) 簡單的對象訪問協議.
3. XML-RPC
(XML Remote Procedure Call)基於XML的遠程過程調用.編程
XML-RPC是經過XML將調用函數封裝,並使用HTTP協議做爲傳送機制。
後來在新的功能不斷被引入下,這個標準慢慢演變成爲今日的SOAP協定。json
SOAP服務則是以自己所定義的操做集,來訪問網絡上的資源。
SOAP也是基於XML的,可是它不僅限於HTTP協議的傳輸,包括TCP協議,UDP協議均可以傳輸。後端
REST是Roy Thomas Fielding博士於2000年在他的博士論文裏提出來的。
REST相比SOAP更加簡潔,性能和開發效率也有突出的優點。瀏覽器
咱們今天主要說一下這個REST,如今愈來愈多的web服務開始採用REST風格設計和實現。
例如,amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的。
***服務器
若是咱們想要理解restful,就得先理解Representational State Transfer這個詞組的意思——==表徵性狀態轉移==.
所謂的表徵性狀態轉移,其實指的就是資源,一般咱們稱之爲==資源狀態轉移==.restful
任何事物,只要有被引用的必要,那麼它就是一個資源.網絡
咱們在瀏覽器中看到的文本、圖片、視頻等等都是資源,這些都是實實在在存在的實體.
資源能夠是一個實體,也能夠是抽象概念,好比:
==在網絡中,咱們要引用的資源,必定要有一個標識,在Web中的惟一標識就是URI.==
URI咱們不常據說,咱們常常用的是URL,二者的區別以下.
==URI 統一資源標誌符==
==URL 統一資源定位符==
沒錯,URI是給咱們的資源進行標識的,URL是描述咱們的資源地址的.
好比,咱們每一個人都有名字和身份證,名字可能會重複,但身份證是惟一的.
那麼身份證號就能夠是咱們的URI,標識咱們每一個人,也能夠說是標識咱們每一個人的資源.
咱們能夠經過身份證號找到嫦娥,也能夠經過下面這種方式找到她...
嫦娥的住址:某某世界->銀河系->獵戶臂->太陽系->月亮...
這就是咱們的URL.
咱們經過這兩種方式均可以找到咱們的資源.
==其實咱們的URL能夠說是URI的子集,經過定位的方式實現的URI.==
這即是咱們的資源定位,有了資源的地址後,咱們是要去訪問資源的.
那麼咱們如何訪問資源呢?以下.
咱們經過URL去訪問到資源,咱們對資源會有不少不一樣的操做——增刪改查.
之前咱們可能會爲了"增長"的功能,而設計一個新的URL,而後這個URL就只負責對數據的增長,還會爲了更新和刪除再分別設計一個URL.
如今咱們不用了,==咱們只需一個URL,而後根據HTTP請求方式的不一樣,對資源進行不一樣的操做,這個就是統一資源接口.==
咱們必定要遵循HTTP請求方式的語義,也就是說POST請求就在新增數據等...
==資源的表述其實就是資源的展示形式,咱們客戶端和服務端傳輸的都是資源的表述,而不是資源自己.==
例如文本資源能夠採用html、xml、json等格式,圖片可使用PNG或JPG展示出來.
那麼客戶端如何知道服務端提供哪一種表述形式呢?
能夠經過HTTP內容協商,客戶端能夠經過Accept頭請求一種特定格式的表述,服務端則經過Content-Type告訴客戶端資源的表述形式。
這些資源的表述呈如今頁面上,就是咱們說的資源狀態.
咱們在看頁面的時候,從當前資源的表述(也能夠說狀態或者表現層)會跳轉到其餘的資源狀態。
服務端經過超媒體協議告訴客戶端當前狀態有哪些後續狀態能夠進入。
這些相似"下一頁"之類的連接起的就是這種推動狀態的做用——指引你如何從當前狀態進入下一個可能的狀態。
總結下來,REST風格的特色以下:
經過超連接的指引,實現"表現層狀態轉移".
***
面向資源編程
: 每一個URL表明一種資源,URL中儘可能不要用動詞,要用名詞.
根據請求方式的不一樣,對資源進行不一樣的操做
: GET/POST/PUT/DELETE/PATCH
在URL中體現版本
: ·
在URL中體現是不是API
: ·
在URL中的過濾條件
: 好比:https:/ /www.bootcss.com/v1/mycss?page=3
儘可能使用HTTPS協議
: 好比:https:/ /www.bootcss.com/v1/mycss
響應時設置狀態碼
: 100 信息,服務器收到請求,須要請求者繼續執行操做.
: 200 成功,操做被成功接收並處理.
: 300 重定向,須要進一步的操做以完成請求.
: 400 客戶端錯誤,請求包含語法錯誤或沒法完成請求.
: 500 服務器錯誤,服務器在處理請求的過程當中發生了錯誤.
: 也能夠是自定義的狀態碼.
返回值
: get 返回查看的全部或單條數據
: post 返回更新的某條數據
: put/patch 返回更新的某條數據
: delete 返回值爲空
Hypermedia API
: 若是遇到須要跳轉的狀況,請攜帶跳轉接口的URL.
is ok. *** "