天天看點

RESTful 架構與 RESTful 服務

風格 ⇒ 标準 ⇒ 協定 ⇒ 實作

representational state transfer,是一種軟體架構風格,既然是風格,就非标準或協定,而是定義了一組設計原則和限制條件。具有如下特點:

适用于用戶端和伺服器互動類的軟體;

基于該風格設計的軟體更簡潔,更有層次,更易于實作緩存等機制;

在rest中,每一個對象都是通過 url 來表示的

網站即軟體,是一種新型的軟體。

作為軟體的網站是一種網際網路軟體,采用用戶端/伺服器模式,建立在分布式體系上,通過網際網路通信,

具有高延時(high latency,受制于帶寬)、高并發的特點;

軟體開發一般針對單機環境,網絡則主要研究系統之間的通信;

restful 架構的提出,使得網站越來越多地具有軟體的屬性,通過風格的限制和限制,也使得網站開發能夠按照軟體開發的方式進行開發。

rest,representational state transfer,表現層狀态轉化(還記得 osi 7層網絡模型嗎,在網絡層、傳輸層之上又細分為會話層(session layer),表示層(presentation layer))。

RESTful 架構與 RESTful 服務

資源(resources)與資源的展現,表示層狀态轉移,省略了主語,表現層其實指的是資源的表示層,對資源的展示與表現;

資源(resources)就是 uri/url 的 r;

所謂“資源”,就是網絡空間中的一個實體,由 uri 唯一指向。它可以是一段文本,一張圖檔,一首歌曲,甚至是一種服務。

一個專門的網站将資源具體呈現出來的形式,叫做它的“表現層”;文本可以用 txt 格式表現,也可用 html 格式、xml 格式、json 格式。uri 僅代表資源,并不指定資源形式。嚴格說來,某些網頁網址(url)最後的“.html”字尾名是不必要的,字尾名表格式,屬“表示層”範疇,而 url 僅說明資源的位置。那麼具體的資源表示(resource representation)應該放在何處呢?通過 http 請求的頭資訊中用 accept 和 content-type 字段(比如為 text/html)指定,這兩個字段是對“表現層”的描述;

狀态轉移(state transfer):通路一個網站,就代表了用戶端和伺服器的一個互動過程,用戶端發出連接配接或者擷取資源的請求,伺服器給出響應。自然這個過程中,必然涉及到資料和狀态的轉化;

http 的第二個 t 就表示 transfer,轉移;

網際網路通信協定http協定,是一個無狀态(stateless)協定。這意味着,所有的狀态都儲存在伺服器端。是以,如果用戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生”狀态轉化”(state transfer)。而這種轉化是建立在表現層之上的,是以就是”表現層狀态轉化”。

用戶端用到的手段,隻能是http協定。具體來說,就是http協定裡面,四個表示操作方式的動詞:get、post、put、delete。它們分别對應四種基本操作:get用來擷取資源,post用來建立資源(也可以用于更新資源),put用來更新資源,delete用來删除資源。

了解restful架構