1. 程式人生 > 實用技巧 >【架構】RESTful的架構思想

【架構】RESTful的架構思想

把軟體(Software)、平臺(Platform)、基礎設施(Infrastructure)做成服務(Service)是很多IT企業都一直在做的事情,這就是大家經常聽到的SasS(軟體即服務)、PasS(平臺即服務)和IasS(基礎設定即服務)。實現面向服務的架構(SOA)有諸多的方式,包括RPC(遠端過程呼叫)、Web Service、REST等,在技術層面上,SOA是一種抽象的、鬆散耦合的粗粒度軟體架構;在業務層面上,SOA的核心概念是“重用”和“互操作”,它將系統資源整合成可操作的、標準的服務,使得這些資源能夠被重新組合和應用。在實現SOA的諸多方案中,REST被認為是最適合網際網路應用的架構,符合REST規範的架構也經常被稱作RESTful架構。

REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的,Roy是HTTP協議(1.0和1.1版)的主要設計者、Apache伺服器軟體主要作者、Apache基金會第一任主席。在他的博士論文中,Roy把他對網際網路軟體的架構原則定名為REST,即REpresentationalStateTransfer的縮寫,中文通常翻譯為“表現層狀態轉移”或“表述狀態轉移”。

這裡的“表現層”其實指的是“資源”的“表現層”。所謂資源,就是網路上的一個實體,或者說是網路上的一個具體資訊。它可以是一段文字、一張圖片、一首歌曲或一種服務。我們可以用一個URI(統一資源定位符)指向資源,要獲取到這個資源,訪問它的URI即可,URI就是資源在網際網路上的唯一標識。資源可以有多種外在表現形式。我們把資源具體呈現出來的形式,叫做它的“表現層”。比如,文字可以用text/plain

格式表現,也可以用text/html格式、text/xml格式、application/json格式表現,甚至可以採用二進位制格式;圖片可以用image/jpeg格式表現,也可以用image/png格式表現。URI只代表資源的實體,不代表它的表現形式。嚴格地說,有些網址最後的.html字尾名是不必要的,因為這個字尾名錶示格式,屬於“表現層”範疇,而URI應該只代表“資源”的位置,它的具體表現形式,應該在HTTP請求的頭資訊中用AcceptContent-Type欄位指定,這兩個欄位才是對“表現層”的描述。

訪問一個網站,就代表了客戶端和伺服器的一個互動過程。在這個過程中,勢必涉及到資料和狀態的變化。Web應用通常使用HTTP作為其通訊協議,客戶端想要操作伺服器,必須通過HTTP請求,讓伺服器端發生“狀態轉移”,而這種轉移是建立在表現層之上的,所以就是“表現層狀態轉移”。客戶端通過HTTP的動詞GET、POST、PUT(或PATCH)、DELETE,分別對應對資源的四種基本操作,其中GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT(或PATCH)用來更新資源,DELETE用來刪除資源。

簡單的說RESTful架構就是:“每一個URI代表一種資源,客戶端通過四個HTTP動詞,對伺服器端資源進行操作,實現資源的表現層狀態轉移”。

我們在設計Web應用時,如果需要向客戶端提供資源,就可以使用REST風格的URI,這是實現RESTful架構的第一步。當然,真正的RESTful架構並不只是URI符合REST風格,更為重要的是“無狀態”和“冪等性”兩個詞。下面的例子給出了一些符合REST風格的URI,供大家在設計URI時參考。

請求方法(HTTP動詞)URI解釋
GET /students/ 獲取所有學生
POST /students/ 新建一個學生
GET /students/ID/ 獲取指定ID的學生資訊
PUT /students/ID/ 更新指定ID的學生資訊(提供該學生的全部資訊)
PATCH /students/ID/ 更新指定ID的學生資訊(提供該學生的部分資訊)
DELETE /students/ID/ 刪除指定ID的學生資訊
GET /students/ID/friends/ 列出指定ID的學生的所有朋友
DELETE /students/ID/friends/ID/ 刪除指定ID的學生的指定ID的朋友

RESTful官方網址:https://restfulapi.net/