REST 是一種設計概念,也是 API 的主流作法
HTTP 就是REST架構的實作
REST 全名
Representational State Transfer (表現層狀態轉化)
標準的 REST
比較特殊的是,前三個執行時都必須傳遞資料給後端程式做運算
而 DELETE,只需要在網址PATH內包入目標 ID
不需要傳遞額外資料
生活化的說法就是,你要丟一包垃圾
你只需要執行「丟掉這一袋垃圾」,而不用去那包垃圾裡面有什麼東西 (資料)
常見的使用方法就是在我們 routes/web.php 加入對應的方法
像是前面做過的
Route::get('/tasks', 'TasksController@index');
或是
Route::post('/posts', 'PostsController@store');
然而除了上面幾種做法外,還有人會寫成大雜燴
在 Laravel 裡面,我們有「resource」這個魔法
resource 本身就是一個完整的 CRUD
同時 resource 可以限制路由的功能,例如我們今天只要一個功能 store()
為了區分邏輯,REST API 一定是依照status區分
POST / PUT / DELETE
HTTP 就是REST架構的實作
REST 全名
Representational State Transfer (表現層狀態轉化)
標準的 REST
domain/{resource}/{id}/{component}常見的範例是
- /blog => 所有部落格
- /blog/1 => 部落格編號 1
- /blog/1/post => 部落格編號 1 的所有文章
如此這般,後面還可以繼續延伸
一般分為四種,順便說明傳遞資料的方法
傳遞參數方法分為兩種 Query or Payload
- GET - query
- POST - payload
- PUT - payload
- 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
留言
張貼留言