1、RESTFul介紹php
1.一種軟件架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件能夠更簡潔,更有層次,更易於實現緩存等機制。html
REST(英文:Representational State Transfer,簡稱REST)描述了一個架構樣式的網絡系統,好比 web 應用程序。它首次出如今 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規範的主要編寫者之一。在目前主流的三種Web服務交互方案中,REST相比於SOAP(Simple Object Access protocol,簡單對象訪問協議)以及XML-RPC更加簡單明瞭,不管是對URL的處理仍是對Payload的編碼,REST都傾向於用更加簡單輕量的方法設計和實現。值得注意的是REST並無一個明確的標準,而更像是一種設計的風格。python
原則條件
REST 指的是一組架構約束條件和原則。知足這些約束條件和原則的應用程序或設計就是 RESTful。
Web 應用程序最重要的 REST 原則是,客戶端和服務器之間的交互在請求之間是無狀態的。從客戶端到服務器的每一個請求都必須包含理解請求所必需的信息。若是服務器在請求之間的任什麼時候間點重啓,客戶端不會獲得通知。此外,無狀態請求能夠由任何可用服務器回答,這十分適合雲計算之類的環境。客戶端能夠緩存數據以改進性能。web
在服務器端,應用程序狀態和功能能夠分爲各類資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、數據庫記錄、算法等等。每一個資源都使用 URI (Universal Resource Identifier) 獲得一個惟一的地址。全部資源都共享統一的接口,以便在客戶端和服務器之間傳輸狀態。使用的是標準的 HTTP 方法,好比 GET、PUT、POST 和 DELETE。Hypermedia 是應用程序狀態的引擎,資源表示經過超連接互聯。算法
http://baike.baidu.com/view/5798116.htmthinkphp
2.REST(Representational State Transfer表述性狀態轉移)是一種針對網絡應用的設計和開發方式,能夠下降開發的複雜性,提升系統的可伸縮性。REST提出了一些設計概念和準則:
一、網絡上的全部事物都被抽象爲資源(resource);
二、每一個資源對應一個惟一的資源標識(resource identifier);
三、經過通用的鏈接器接口(generic connector interface)對資源進行操做;
四、對資源的各類操做不會改變資源標識;
五、全部的操做都是無狀態的(stateless)。數據庫
須要注意的是,REST是設計風格而不是標準。REST一般基於使用HTTP,URI,和XML以及HTML這些現有的普遍流行的協議和標準。apache
傳統的請求模式和REST模式的請求模式區別:json
做用 | 傳統模式 | REST模式 |
---|---|---|
列舉出全部的用戶 | GET /users/list | GET /users |
列出ID爲1的用戶信息 | GET /users/show/id/1 | GET /users/1 |
插入一個新的用戶 | POST /users/add | POST /users |
更新ID爲1的用戶信息 | POST /users/mdy/id/1 | PUT /users/1 |
刪除ID爲1的用戶 | POST /users/delete/id/1 | DELETE /users/1 |
關於更多的REST信息,能夠參考:http://zh.wikipedia.org/wiki/RESTsegmentfault
二.使用RESTFul的好處
a.我理解你的問題應該是「把傳統的PHP Web接口改爲符合RESTful風格的Web接口有什麼用處?」
其實,這裏最好用「好處」這個詞來代替「用處」,由於傳統的Web接口實現方式一樣可以實現業務須要(因此這不是一個必須的事情,須要本身根據業務需求綜合判斷是否須要採用),而改用「RESTful風格」會有一些額外的「好處」:
統一的風格可以讓各方更加便利的進行交互,也帶來了更好的兼容性(這是一個全部遵循必定規範所帶來的共通的好處,就像你們都說普通話,交流起來多方便啊)
對資源的操做正好對應相應的HTTP動做(GET、POST、PUT、DELETE),而這些動做正好能夠知足咱們對資源狀態進行操做的須要,也就是說想對資源狀態進行什麼樣的操做就選擇什麼樣的動做,而這些動做又是HTTP協議自己提供的,多麼和諧天然啊(就是題主的摘錄內容)
請求所形成的影響明確,或者說反作用明確,好比GET確定是安全的,PUT和DELETE確定是冪等得,POST確定是不安全的(這裏的確定是創建在API設計徹底遵循「RESTful風格」基礎上的)
良好的符合「RESTful風格」的URI設計,可讓Web接口的功能和總體結構更加清晰,僅僅經過URI就能方便的推測出來接口是作什麼的,以及多個資源之間關聯性
利用HTTP內容協商(content negotiation)實現資源的多重表述,好比請求方能夠把本身須要的格式放到頭信息的Accept字段中表述(如Accept: text/json),這樣一樣一個URI就能夠輸出多種格式而再也不須要在URI裏面特別加上一個type=json的參數了
客戶端、代理服務器等能夠根據HTTP協議規範進行相應的額外處理,好比Cache
... 可能還有我沒總結到的好處(固然也會有一些不足~~)
上述,主要是列舉了「RESTful風格」與傳統設計比較帶來的好處,可是最重要並讓RESTful流行起來的緣由,應該是RESTful在實現網絡服務(Web service)方面比XML-RPC/SOAP等協議更加輕量級、擁有更好的透明性和伸縮性所致,這個就又能夠解釋不少了,再也不贅述,推薦下面2偏文章供繼續深刻了解。
阮一峯:理解RESTful架構
REST vs XML-RPC vs SOAP – pros and cons
b.RESTFul爲何流行?說白了就一個緣由:簡單。
對API consumer來講,開發調試RESTFul API只須要有curl就好。
相比SOAP來講,沒有client code自動生成。相比thrift來講,RESTFul又有HTTP協議帶來的巨大overhead。
c.不明白的東西就能夠暫時不碰,若是須要用到了再學。若是你有心情瞭解一下RESTful的話,wikipedia裏面就有一堆連接,能夠了解它的含義、做用、應用場景以及相關技術(好比SOAP)。
REST是HTTP層面的東西,和PHP或者任何其餘語言都無關。它是一種約定俗成的HTTP請求語義的習慣,或者說開放、管理服務器資源的習慣,不是具體技術層面的東西。和全部其餘的習慣、約定同樣,你徹底能夠不遵照它,而遵照RESTful天然會帶來一些優點(好比GET和PUT是idempotent的,在發起和處理請求的時候就能夠少量多驗證一致性的邏輯)。
一個很優秀的例子是CouchDB的RESTful API:http://wiki.apache.org/couchdb/HTTP_Document_API
d.其餘的回答都很好, 這裏從另一個角度簡單說一下個人見解
若是你只是作一次性的項目, REST是可選項, 你只要把數據弄對了就能夠了
若是你是作本身的產品, 那麼爲了代碼的可維護性, 你也許會參考一下REST標準, 團隊裏面統一一下, 能REST就REST, 目的是爲了減小溝通成本, 提升生產效率, 鼓舞士氣(讓你們都以爲本身在一個NB的團隊裏)
若是你是作一個開放平臺的, 尤爲是世界級別的開放平臺好比FB和Twitter, 那麼你別無選擇, 全世界都在看着呢, 一個API的變化就會引起無數口水和新聞報道, 當來也可能引起bug. 這種狀況請本身掂量.
我的觀點: 我通常工做在第二中狀態, 追求的是生產效率. 能夠明確的告訴你, REST不能保證生產效率的提升, 適當使用, 看狀況使用, 要學習但不要糾結.
e.個人建議是
一、換一個語言。
我如今也以爲難以置信:我在我初學PHP的一年裏都沒有接觸到任何有關HTTP的知識。而當我寫python和Node.js的時候,次日就遇到了。逼着本身去查詢資料,而後學會了。
一樣的問題還有,PHP初學者有幾個知道:buffer,BDD,cgi等等等...
二、閱讀《HTTP權威指南》,一本號稱閱讀完月薪至少能拿到1w的書。
f.和傳統SOAP相比,實現的結果是同樣的,即提供web service,但就訪問方式和風格上會簡單不少
https://segmentfault.com/q/1010000000319475
延伸閱讀:
http://www.ruanyifeng.com/blog/2011/09/restful
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
http://document.thinkphp.cn/manual_3_2.html#restful
https://segmentfault.com/q/1010000000319475
https://segmentfault.com/q/1010000000500665
http://www.baidu.com/s?wd=restful
http://www.sogou.com/web?query=restful
https://www.so.com/s?q=restful
http://www.baidu.com/s?wd=restful%20php
http://www.sogou.com/web?query=restful%20php
https://www.so.com/s?q=restful%20php