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

規範

  1. 不用大寫字母,所有單詞使用英文且小寫。
  2. 連字元用中槓"-"而不用下槓"_"
  3. 正確使用 "/" 表示層級關係,URL的層級不要過深,並且越靠前的層級應該相對越穩定
  4. 結尾不要包含正斜槓分隔符"/"
  5. URL中不出現動詞,用請求方式表示動作
  6. 資源表示用複數不要用單數
  7. 不要使用副檔名

應用

  • 說是風格,表示實際執行上不是很嚴格,只是說如果大家都這麼做會比較方便
  • 例如更新資料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