Web —什麼是Restful & Restful API?

Shih Ting, Tai
Jul 18, 2021
RESTful 風格的網址設計強調從路由結構就能看出要對什麼資料、進行什麼操作RESTful 這種「和 CRUD 對齊」的特性會帶來一些溝通的便利性,客戶端只需要知道可用資源,就能依照約定俗成的邏輯,推測出相關的 API。

什麼是 Restful API?

REST 是 Representational State Transfer 的縮寫,可譯為「具象狀態傳輸」,從網址上就可以大致看出要對資源做什麼事。而符合 REST 風格的網站架構可以稱為 RESTful。

RESTful API 主要由三種元件組成:

  1. Nouns 名詞:定義資源位置的 URL,每個資源在網路上都會有唯一的位置,就如每戶人家都有唯一的地址一樣。
  2. Verbs 動詞:對資源要做的動作。
  3. Content Types 資源呈現方式:API 資源可以以多種方式表現,最常用的是 JSON,較輕,也較好處理。

使用 RESTful 風格設計的 API,會有以下優點及限制:

  1. 有唯一的URL表示資源位置,統一的 API 接口。(Uniform Interface)

2. 無狀態。(Stateless)

RESTful 的狀態,意即 HTTP 的請求狀態。

一般 Web 服務中,Server 端和 Client 端交互的資訊,會存在 Server 端的 Session (例如:已登入狀態),在 Client 端再次發送請求的時候,Server 端透過保存在 Server 端的 Session,去執行 request。

無狀態的意思,即 Client 端自行保存狀態,在請求 Server 的時候,一併附上給 Server 端,Server 端無保存 Client 端的狀態資訊。

舉一個白話一點的例子:查詢員工工資:
第一步:登錄系統。
第二步:進入查詢工資的頁面。
第三步:搜索該員工。
第四步:點擊姓名查看工資。

這樣的操作流程就是有狀態的,查詢工資的每一個步驟都依賴於前一個步驟,只要前置操作不成功,後續操作就無法執行。如果輸入一個URL就可以直接得到指定員工的工資,這種情況就是無狀態的,因為獲取工資不依賴於其他資源或狀態,這種情況下,員工工資是一個資源,由一個 URL 與之對應可以通過 HTTP 中的 GET 方法得到資源,這就是典型的 RESTful 風格。

  • 可使用 QueryString,但只應拿來傳遞額外過濾條件或參數,不應包含識別資源的鍵值
  • 使用 HTTP 方法 POST、GET、PUT、DELETE 對應到建立、讀取、更新、刪除等動作。
  • 透過 Accept Header 指明可接收的內容格式,例如:/user/123?format=json or /user/123?format=xml
  • 伺服器透過 HTTP 狀態碼回傳執行結果,例如:200 成功、401 存取被拒、404 找不到資源、500 伺服器錯誤
補充 : URL vs. URIURL 是路徑 (ex: localhost:80/user) 
URI 是資源實際位置 (ex: localhost:80/user/save)

參考資料:

--

--

Shih Ting, Tai

Enhance overall happiness by improving human-computer interaction to benefit people.