RESTful API
RESTful API
RESTful API
一種設計風格,以資源為核心,用HTTP請求方法傳達動作意涵
- HTTP協議的常見請求,對應的資料庫操作為:
HTTP | SQL | 意義 |
---|---|---|
GET | SELECT | 從Server讀取資源 |
POST | CREATE | 往Server建立(或更新)資源 |
PUT | UPDATE | 使Server更新(全覆蓋)指定資源 |
PATCH | UPDATE | 使Server更新(局部)指定資源 |
DELETE | DELETE | 使Server刪除指定資源 |
- URI: Uniform Resource Identifier,統一資源定位,一個URI表示一個確切的資源
- 為URL的子集
- 範例:
格式 | 範例 | |
---|---|---|
URL | 協議://域名/路徑?查詢#HASH | http://abc.com/users?action=delete&id=1 |
URI | 協議://域名/路徑 | http://abc.com/users/1 |
-
傳統風格關注於方法,透過URL表達動作與參數等等
- 例如http://abc.com/service/deleteUser?id=1
-
REST風格關注於資源本身(URI),透過請求的不同決定對這個資源做啥操作,例如:
HTTP請求方式 | 表達含意 | |
---|---|---|
/users/1 | GET | 想獲取user1資料 |
/users/1 | DELETE | 刪除user1 |
/users | POST | 要新增一個user |
規範
- 不用大寫字母,所有單詞使用英文且小寫。
- 連字元用中槓
"-"
而不用下槓"_"
- 正確使用
"/"
表示層級關係,URL的層級不要過深,並且越靠前的層級應該相對越穩定 - 結尾不要包含正斜槓分隔符
"/"
- URL中不出現動詞,用請求方式表示動作
- 資源表示用複數不要用單數
- 不要使用副檔名
應用
- 說是風格,表示實際執行上不是很嚴格,只是說如果大家都這麼做會比較方便
- 例如更新資料POST、PUT、PATCH都有人用,並且這個還涉及idempotence(冪等)的問題,實際還是要看開發的時候API如何設計
- 冪等:多次請求結果是否一致
補充
- 瀏覽器的表單
<form>
只有GET與PSOT - 擴展用
<input name="_method"
傳遞參數 - 在Spring框架使用
HiddenHttpMethodFilter
可以接收_method
參數,從而識別表單的DELETE與PUT,例如:
<form action="book/1" method="post">
<input name="_method" value="delete"/>
上次修改於 2022-01-15