rest -- representational state transfer 直接翻譯:表現層狀態轉移。這個中文直譯經常出現在很多部落格中。尼瑪誰聽得懂「表現層狀態轉移」?這是人話嗎?我自己也困惑了很久,查詢了很多資料,花了差不多一年有個還算清晰的理解。分享如下:
@ivony
老師的一句話概括很精闢:
url定位資源,用http動詞(get,post,delete,detc)描述操作。
--- 簡潔版 ---0. rest不是"rest"這個單詞,而是幾個單詞縮寫。但即使那幾個單詞說出來,也無法理解在說什麼 -_-!! (不是要貶低人,是我自己也理解困難);
1. rest描述的是在網路中client和server的一種互動形式;rest本身不實用,實用的是如何設計 restful api(rest風格的網路介面);
2. server提供的restful api中,url中只使用名詞來指定資源,原則上不使用動詞。「資源」是rest架構或者說整個網路處理的核心。比如:
: 獲取某人的新鮮;
: 獲取某人的好友列表;
: 獲取某人的詳細資訊;3. 用http協議裡的動詞來實現資源的新增,修改,刪除等操作。即通過http動詞來實現資源的狀態扭**
get 用來獲取資源,
post 用來新建資源(也可以用於更新資源),
put 用來更新資源,
delete 用來刪除資源。比如:
delete : 刪除某人的好友 (在http parameter指定好友id)
post : 新增好友
update
: 更新個人資料
禁止使用: get
圖例:
4. server和client之間傳遞某資源的乙個表現形式,比如用json,xml傳輸文字,或者用jpg,webp傳輸等。當然還可以壓縮http傳輸時的資料(on-wire data compression)。
5. 用 http status code傳遞server的狀態資訊。比如最常用的 200 表示成功,500 表示server內部錯誤等。
主要資訊就這麼點。最後是要解放思想,web端不再用之前典型的php或jsp架構,而是改為前段渲染和附帶處理簡單的商務邏輯(比如angularjs或者backbone的一些樣例)。web端和server只使用上述定義的api來傳遞資料和改變資料狀態。格式一般是json。ios和android同理可得。由此可見,web,ios,android和第三方開發者變為平等的角色通過一套api來共同消費server提供的服務。
--- 詳細版 ---
先說rest名稱
rest -- representational state transfer
首先,之所以晦澀是因為前面主語被去掉了,全稱是 resource representational state transfer:通俗來講就是:資源在網路中以某種表現形式進行狀態轉移。分解開來:
resource:資源,即資料(前面說過網路的核心)。比如 newsfeed,friends等;
representational:某種表現形式,比如用json,xml,jpeg等;
state transfer:狀態變化。通過http動詞實現。
rest的出處
rest章節:fielding dissertation: chapter 5: representational state transfer (rest)
rest那章我初讀了,整個**沒有讀完 =_=
實用的是如何正確地理解 restful架構和設計好restful api。首先為什麼要用restful結構呢?
server的api如何設計才滿足restful要求?
首先是簡潔版裡面的那幾點。外加一些附帶的 best practices:
1. url root:
**2. api versioning:
可以放在url裡面,也可以用http的header:
/api/v1/
3. uri使用名詞而不是動詞,且推薦用複數。
badgood
4. 保證 head 和 get 方法是安全的,不會對資源狀態有所改變(汙染)。比如嚴格杜絕如下情況:
get /deleteproduct?id=1
5. 資源的位址推薦用巢狀結構。比如:
get /friends/10375923/profile
update /profile/primaryaddress/city6. 警惕返回結果的大小。如果過大,及時進行分頁(pagination)或者加入限制(limit)。http協議支援分頁(pagination)操作,在header中使用 link 即可。
7. 使用正確的http status code表示訪問狀態:http/1.1: status code definitions
各端的具體實現
如上面的圖所示,server統一提供一套restful api,web+ios+android作為同等公民呼叫api。各端發展到現在,都有一套比較成熟的框架來幫開發者事半功倍。
-- server --
推薦: spring mvc 或者 jersey 或者 play framework
教程:getting started · building a restful web service
-- android --
推薦: retrofit ( retrofit ) 或者 volley ( mcxiaoke/android-volley · github google官方的被block,就不貼了 )
教程:retrofit โ€」 getting started and create an android client
快速android開發系列網路篇之retrofit
參考:[1]: some rest best practices
[2]: github api v3
[3]: tlhunter/consumer-centric-api-design · github
什麼是REST?以及RESTful的實現
什麼是rest?rest representation state transfer 描述了乙個架構樣式的網路系統,比如 web 應用程式。它首次出現在 2000 年 roy fielding 的博士 中,他是 http 規範的主要編寫者之一。rest 指的是一組架構約束條件和原則。滿足這些約束條件...
什麼是REST架構
rest架構風格是全新的針對web應用的開發風格,是當今世界最成功的網際網路超 分布式系統架構,它使得人們真正理解了http協議本來面貌。隨著 rest架構成為主流技術,一種全新的網際網路網路應用開發的思維方式開始流行。rest是什麼 rest是英文representational state tr...
嘗試理解SOAP與REST和RESTful
通俗的語言解釋rest restful。一句話 url定位資源,用http動詞 rest不是rest這個詞,rest是指的是網路中client和server的一種互動形式,rest本身並不實用,實用的是如何設計restfulapi。server提供的restfulapi中,url中只適用名詞來指定資...