什麼是REST,以及RESTful?

2022-06-23 16:33:07 字數 3312 閱讀 2041

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中只適用名詞來指定資...