前後端分離的架構在現在大型系統的開發已經是必備的,因為要將邏輯分離,這樣在開發的時候才不會耦合性太高,然而此種架構最常見的後端開發方式就是設計成 RESTful
拉,因此今天就讓我們來聊聊REST
吧!
REST 是由 Roy Fielding
博士在 2000 所發表的 Architectural Styles and the Design of Network-based Software Architectures 論文中所中提到的一種 網頁服務設計風格
,基本上就是 Representational State Transfer
的縮寫,代表意義如下
必須是可被描述的一種實體,例如 json
、xml
等
如字面上的意義,就是一種 狀態轉換
,基本上就是對應到 http method
如 Get
、POST
等
只要是使用 REST
的概念所設計的系統皆可以稱之為 RESTful
的系統,為什麼後面會多了 ful
呢,舉例而言,漂亮的單字叫做 Beauty
,代表漂亮的東西就使用 Beautiful
來代表,因此,使用 REST
所設計的系統就叫做 RESTful
了
也就是今天最早提到的 前後端分離
的概念,將使用者操作時所關注的邏輯 與 資料處理
時所關注的邏輯進行分離,有助於提高使用者介面的跨平台的可移植性.通過簡化伺服器模組也有助於伺服器模組的可延伸性。
Server 端不會儲存任何 Client 的資料,因此在 Client 端每次進行資源存取時都必須要包含所有的必須的狀態資訊,一般而言都會將資訊儲存於 header
中。
將 Server 端所提供的資源狀態進行快取,這樣的做法不但可以加快 Client 存取資料的速度,也可以減少 Client 對於 Server 端的存取,將整體的資源消耗程度降低。
也就是在做資源存取時的統一規範,以下有四項限制
primary key
user
與 app
兩個模組,client 在存取 url
為 /api/v1
後,應用 A 回傳
{
"version": "v1",
"resources: [
"/api/v1/user",
"/api/v1/app"
]
}
REST
風格的 URL 基本上設計的格式如下
prefix + endpoint
prefix 一般而言我都是由以下資訊拼湊而成
/api
/v{number}
格式,如 /v1
為第一版本的 api資源存取的終點,如要操作編號為 123
的 user
,endpoint 就為 /user/123
如果要操作 版本 1
、user
編號為 123
的 API,整體的 URL 會像是
/api/v1/user/123
使用 REST
作為網頁服務的開發架構具有以下幾種優點
快取
來提高回應速度無狀態性
可以讓不同的 Server 的處理一系列請求中的不同請求,提高 Server 的擴充性REST
所設計的軟體ㄑ 相依性
更小相容性
更好今天我們開發了一個會員系統,其中我們要負責將 user
設計成一個具有 REST
風格的 API
首先我們將 user
進行,每個使用者都必須要有一個唯一的會員編號,架構如下
type User struct {
ID string `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
Phone string `json:"phone"`
}
對 user
進行 CRUD,URL 設計如下
user
列表:GET /api/v1/user
user
:GET /api/v1/user/:id
user
:POST /api/v1/user
user
:PUT /api/v1/user/:id
user
:PATCH /api/v1/user/:id
user
:DELETE /api/v1/user/:id
REST 的設計真的可以讓我們對於資源的掌控度與靈活度更高,也同時讓我們審視自己在設計軟體架構是否有問題,真的是一個不錯的設計,推薦給大家!