https://github.com/Orange-codee/RestfulAPI-demo
https://vocus.cc/article/64b8916efd89780001cfce57
表現層狀態轉換(英語:Representational State Transfer,縮寫:REST)是Roy Thomas Fielding博士於2000年在他的UC Irvine博士論文中提出來的一種全球資訊網軟體架構風格,目的是便於不同軟體/程式在網路(例如WWW)中互相傳遞資訊。 REST 是根基於超文字傳輸協定(HTTP)之上而確定的一組約束和屬性,也就是說REST本身並不是一套標準,而是一套設計風格。現代API在製作時,通常採用的設計風格就是REST。因此,這類型的API被稱為是RESTful APIs。
符合或相容於這種架構風格(簡稱為 REST 或 RESTful)的網路服務,允許使用者端發出以統一資源標識符(簡稱為URI)存取和操作網路資源的請求,而與預先定義好的無狀態操作集一致化。相對於其它種類的網路服務,例如SOAP服務,則是以本身所定義的操作集,來存取網路上的資源。
如果我們要將伺服器架構成一種服務(或是API),讓任何使用者都可以存取資料,則可以將製作一個 RESTful API:
HTTP Verb | Path | 用途 |
---|---|---|
GET | /students | 獲得所有學生的資料。 |
GET | /students/:id | 獲得特定的學生資料。 |
POST | /students | 創建一個新的學生。 |
PUT | /students/:id | 修改特定的學生資料。使用者提供的資料會被變成資料庫內的完整新資料。 |
PATCH | /students/:id | 修改特定的學生資料。使用者只需要提供要被修改的資料即可。 |
DELETE | /students/:id | 刪除特定的學生。 |
如果我們的伺服器不提供服務,而是網頁功能,還是可以將網頁伺服器內部的routing做成REST風格,稱為RESTful Routing。 通常來說,RESTful Routing遵守以下的表格。當然,每個網站也可以設定自己的Restful Routing。以下的表格與Ruby on Rails框架相同:
HTTP Verb | Path | 用途 |
---|---|---|
GET | /students | 獲得所有學生的資料。 |
GET | /students/new | 回傳一個包含可以用來新增新學生的表格的網頁。 |
POST | /students | 創建一個新的學生。 |
GET | /students/:id | 獲得特定的學生資料。 |
GET | /students/:id/edit | 回傳一個包含可以用來修改學生資料的表格的網頁。 |
PUT/PATCH | /students/:id | 修改特定的學生資料。 |
DELETE | /students/:id | 刪除特定的學生。 |
2xx = Success(成功) 3xx = Redirect(重定向) 4xx = User error(客戶端錯誤) 5xx = Server error(伺服器端錯誤)
有唯一的URL表示資源位置,統一的 API 接口。(Uniform Interface)
無狀態。(Stateless)
无状态意味着每个HTTP请求都完全隔离。当客户端发出HTTP请求时,它包含服务器完成该请求所需的所有信息。服务器永远不会依赖先前请求的信息。