怎麼大家都一直在說 REST 和 RESTful?

關於這兩個名詞的好奇,其實是因為接觸 ruby on rails 的學習歷程中,查詢相關的職缺資訊後,發現許多公司的需求不斷提到這兩個字,因此想要去了解這是在說甚麼,才知道原來 ROR 把這樣的設計風格大大發揚光大呢! 不過都學了 Rails 還不好好把這些名詞弄懂真的太對不起了。

REST?

Representational State Transfer,簡稱 REST,直譯為”表徵化狀態轉變”,但一聽到這樣的名詞其實根本搞不懂這到底在說甚麼。

簡單地說 REST 是一種軟體架構風格 ,適合應用在複雜的網路服務環境中,而 HTTP 也是符合 REST 的架構的一項實作。
目的是針對不同軟體、程式在網際網路中能夠互相傳遞訊息。每一個網頁都可視為一個資源(resource)提供使用者使用,而你可以透過 URL(Uniform Resource Locator),也就是這些資源的地址,對這些資源透過 HTTP 動詞,來讀取這些資源或是修改。

RESTful-Triangle (REST 金三角) 概念:

EX:以我們平常上網的例子來說明應該比較好了解這些組成之間的關係

  • 瀏覽器上輸入 url https://oseanchen.github.io/(名詞),對瀏覽器送出 Request
  • 瀏覽器告訴網頁伺服器:請給我(GET 動詞)這個網址位置HTML 格式文件(表徵)
  • 接著瀏覽器解析並呈現出 HTML (回應 Response),看到畫面(Render)
  • 過程中可能讀取網頁中的圖片(表徵),或者點選連結獲得 XML 文件(XML 表徵),甚至傳送留言(POST 動詞)

這樣的例子就簡單的說明:

REST 操作 Web 的基本行為是一種表徵化狀態轉變,主要是藉由操作 (動詞) 不同的 URL (名詞) 達成不同的資料 (表徵) 呈現方式。

*補充解釋 Resource
有解釋中提到,名詞內其實包含了資源(Resource)的部分,在原本的全名中被省略,URL 表示三角形中的名詞,會指向資源 (可能是圖片、連結或是一些內容,content type) 的位置,所以我們是透過網址(URL)指向資源並用特定動詞取得資源,每一種資源對應一個特定的 URL。

*補充解釋 HTTP 動詞
GET => 讀取資源
POST => 新增資源
PUT => 替換資源
PATCH => 更換資源部分內容
DELETE => 刪除資源

RESTful?

一開始看到會直覺想到 beautiful, successful 之類的單字都是用名詞 + “ful” 轉變來,所以 RESTful 可算是形容詞,一般來說就是朝著 REST 理念所設計出來的系統可稱為 RESTful

路徑設計比較:

RESTful 路徑設計主要會是下面的概念,可以一眼從路由結構就能看出要對什麼資源(名詞)、進行什麼操作(動詞)。

瀏覽全部資料:GET + 資源名稱
瀏覽特定資料:GET + 資源名稱 + :id
新增一筆資料:POST + 資源名稱
修改特定資料:PUT + 資源名稱 + :id
刪除特定資料:DELETE + 資源名稱 + :id

非 REST

取得所有文章資料 GET /getAllArticles
取得某筆文章資料 GET /getArticle/11
新增文章資料 POST /createArticle
更新某筆文章資料 POST /updateArticle/
刪除某筆文章資料 POST /deleteArticle/

RESTful

取得所有文章資料 /GET /Articles
取得某筆文章資料 /GET /Articles/1
新增文章資料 /POST /Articles
更新某筆文章資料 /PATCH /Articles/1
刪除某筆文章資料 /DELETE /Articles/1

看到這裡也很直覺得想到我在實作 rails 的過程其實一直在歷經這樣操作,也是因為這樣風格規範之下可以呈現簡明的網址設計。


參考資料:

  1. 淺談 REST 軟體架構風格 (Part.I) - 從了解 REST 到設計 RESTful!
  2. RESTful API 設計準則與實務經驗
  3. Rails 實戰聖經
  4. 簡單理解 REST 設計風格與 RESTful API
  5. 什麼是 REST? 認識 RESTful API 路由語義化設計風格