如下為請求修改ID為2的動物資料
PUT|PATCH api/animal/2
AnimalController
public function update(Request $request, Animal $animal)
{
$animal->update($request->all());
return response($animal, Response::HTTP_OK);
}
完成!一樣很簡單吧!
PUT|PATCH 差別
Update 動作有兩種! PUT 以及 PATCH 很常搞混他們的差別。
我自己是這樣區分定義這兩種動作
- PUT 是替換掉「
整筆資料
」的欄 - PATCH 是修改「
部分
」的欄位
欄位 | 資料庫資料 | 使用者請求資料 | PATCH 結果 | PUT 結果 |
id | 1 | 1 | 1 | 1 |
name | 小黑 | 大黑 | 大黑 | 大黑 |
birthday | 2019-1-1 | (未設定) | 2019-1-1 | null |
- PATCH
- 沒有設定的參數會保留舊有資料,其他有設定的會更新。
- PUT
- 可以看到跟PATCH 差別在於生日的欄位,未輸入的欄位,變成預設值或null (如果必填欄位沒有填寫,則回傳錯誤,修改動作失敗!)
ID不會讓人更改,最主要的功能是用來關聯以及識別,就算刪除資料也不會補空缺,會持續不斷得遞增。
也因為全部替換的機率不大,通常都是需要保留舊有的欄位資料,不會把它整筆替換掉,打算只用 PATCH 這種方法 ,Laravel 內建的設定是把這兩個動作,全部都指向update 方法。
這是我對 PATCH 與 PUT 的理解!有任何想法歡迎討論指教 ^^
但也再次強調,RESTful API是一種設計模式而已,可能公司或是手上的維護案已經有類似的規劃了,建議就照著目前的程式統一去撰寫,除非成本以及時間很多!再考慮找一個最好的方法來改版。
嘗試可不可以運行
因為我們還沒有實作查詢的動作!
我們再來新增一筆動物資料
如下圖設定 更改動物名稱為 多多
- 修改動詞PATCH
- 修改URI api/animal/
6
<-預計修改的ID - 確定x-www-form-urlencoded
- 輸入資料 以上圖為例就是要修改name欄位值為多多
- Send 送出請求
- 顯示結果確實變更為 多多 成功!
題外話 id是亂碼的網站怎麼做的
上面有提到id 讓我想到之前我很想知道為什麼,有些網站要把id 設定成一小段亂碼
以下是我自己的看法,例如 Youtube
https://www.youtube.com/watch?v=cBVGlBWQzuc
cBVGlBWQzuc 這一段亂碼是為了讓別人不要去猜到他們的id,但我想資料表內應該一樣有一組遞增的id來另外紀錄以及關聯(日後幾天的文章會提到關聯式資料庫的設計),以免發生重複的情況!例如刪除影片,上傳其他影片結果產生同樣亂碼,資料表沒有檢查到的狀況。
這組亂碼只是資料表中的其中一欄資料。依照程式邏輯在上傳影片(新增物件)這個動作時,去產生這組不重複的亂碼。
或者他的資料都是軟體刪除的方式,表面上刪除了檔案,但資料表的資料並未刪除,是利用一個欄位來判斷是否顯示而已, 例如 資料欄位 deleted_at 有日期表示已刪除,讀取資料要排除掉,這樣也可以避免產生重複的亂碼id。
好了今天就到這!休息一下明天繼續打造 API 剩下查詢功能囉!
最基本的操作就要完成了!加油!加油!
點上面Youtube連結 聽一下音樂消化一下吧!明天見(是我想休息~哈哈哈xD)