REST入門概念

REST 是一種設計概念,也是 API 的主流作法
HTTP 就是REST架構的實作

REST 全名
Representational State Transfer (表現層狀態轉化)

標準的 REST
domain/{resource}/{id}/{component}
常見的範例是

  • /blog             => 所有部落格
  • /blog/1          => 部落格編號 1
  • /blog/1/post  => 部落格編號 1 的所有文章
如此這般,後面還可以繼續延伸

一般分為四種,順便說明傳遞資料的方法
傳遞參數方法分為兩種 Query or Payload
  1. GET        - query 
  2. POST      - payload
  3. PUT        - payload
  4. DELETE  - (None)
Query = url 帶資料,以前統稱 get 方法
Payload = 不使用 url 帶資料,使用例如form post的方法,以前統稱 post 方法 

比較特殊的是,前三個執行時都必須傳遞資料給後端程式做運算
而 DELETE,只需要在網址PATH內包入目標 ID
不需要傳遞額外資料
生活化的說法就是,你要丟一包垃圾
你只需要執行「丟掉這一袋垃圾」,而不用去那包垃圾裡面有什麼東西 (資料)

常見的使用方法就是在我們 routes/web.php 加入對應的方法
像是前面做過的
Route::get('/tasks', 'TasksController@index');
或是
Route::post('/posts', 'PostsController@store');

然而除了上面幾種做法外,還有人會寫成大雜燴
Route::resource('user', UserController::class);

在 Laravel 裡面,我們有「resource」這個魔法
resource 本身就是一個完整的 CRUD
同時 resource 可以限制路由的功能,例如我們今天只要一個功能 store()
Route::resource('user', UserController::class, ['only' => 'store'])
再來還有很重要的 http status
為了區分邏輯,REST API 一定是依照status區分

2XX

GET請求成功一定是200,其他成功的也都是2xx開頭!

POST / PUT / DELETE

  • 201 - Created (POST專用) 成功建立
  • 202 - Accepted (PUT/DELETE) 已接受
  • 204 - No Content 伺服器成功處理了請求,沒有回傳任何內容。

4XX

原則來說,錯誤一定都是4xx
常見有403、404,其他還有
  • 401 - Unauthorized 未授權
    和403不同的是,403是禁止造訪
    401則可以造訪但可能因為該用戶權限不足
    例如沒有文章編輯的權限,此時就會回報 401
  • 409 - Conflict 衝突,有人把文章刪掉你又要刪就會起爭議
  • 422 - Unprocessable Enity 語義錯誤,要 int 給 string 之類

5XX

在你無法識別錯誤的時候
本機開發不應該出現這個錯誤
通常是在資料庫連接失敗或是伺服器出問題才會回報這個

這就算是一個初探REST
剩下的下集待續


留言