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 api
實用的是如何正確地理解 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 表徵性狀態傳輸,representational state transfer 指的是一組架構約束條件和原則。是roy field...
rest與restful
知乎上面摘抄的,感覺不錯,分享下 1 rest描述的是在網路中client和server的一種互動形式 rest本身不實用,實用的是如何設計...
什么是資料庫遊標
1 什么是遊標? 遊標,也有人稱為游標。概括的講,它是基於記錄的。 過去,關係型資料庫沒有象現在這樣被廣泛的應用。那時候,人們大多使用 db...