更新動物資料

如下為請求修改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 1111
name 小黑 大黑 大黑 大黑
birthday 2019-1-1 (未設定) 2019-1-1 null
  • PATCH
    • 沒有設定的參數會保留舊有資料,其他有設定的會更新。
  • PUT
    • 可以看到跟PATCH 差別在於生日的欄位,未輸入的欄位,變成預設值或null (如果必填欄位沒有填寫,則回傳錯誤,修改動作失敗!)

ID不會讓人更改,最主要的功能是用來關聯以及識別,就算刪除資料也不會補空缺,會持續不斷得遞增。

也因為全部替換的機率不大,通常都是需要保留舊有的欄位資料,不會把它整筆替換掉,打算只用 PATCH 這種方法 ,Laravel 內建的設定是把這兩個動作,全部都指向update 方法。

這是我對 PATCH 與 PUT 的理解!有任何想法歡迎討論指教 ^^

但也再次強調,RESTful API是一種設計模式而已,可能公司或是手上的維護案已經有類似的規劃了,建議就照著目前的程式統一去撰寫,除非成本以及時間很多!再考慮找一個最好的方法來改版。

嘗試可不可以運行

因為我們還沒有實作查詢的動作!

我們再來新增一筆動物資料

如下圖設定 更改動物名稱為 多多

  1. 修改動詞PATCH
  2. 修改URI api/animal/6 <-預計修改的ID
  3. 確定x-www-form-urlencoded
  4. 輸入資料 以上圖為例就是要修改name欄位值為多多
  5. Send 送出請求
  6. 顯示結果確實變更為 多多 成功!

題外話 id是亂碼的網站怎麼做的

上面有提到id 讓我想到之前我很想知道為什麼,有些網站要把id 設定成一小段亂碼

以下是我自己的看法,例如 Youtube

https://www.youtube.com/watch?v=cBVGlBWQzuc

cBVGlBWQzuc 這一段亂碼是為了讓別人不要去猜到他們的id,但我想資料表內應該一樣有一組遞增的id來另外紀錄以及關聯(日後幾天的文章會提到關聯式資料庫的設計),以免發生重複的情況!例如刪除影片,上傳其他影片結果產生同樣亂碼,資料表沒有檢查到的狀況。

這組亂碼只是資料表中的其中一欄資料。依照程式邏輯在上傳影片(新增物件)這個動作時,去產生這組不重複的亂碼。

或者他的資料都是軟體刪除的方式,表面上刪除了檔案,但資料表的資料並未刪除,是利用一個欄位來判斷是否顯示而已, 例如 資料欄位 deleted_at 有日期表示已刪除,讀取資料要排除掉,這樣也可以避免產生重複的亂碼id。

好了今天就到這!休息一下明天繼續打造 API 剩下查詢功能囉!

最基本的操作就要完成了!加油!加油!

點上面Youtube連結 聽一下音樂消化一下吧!明天見(是我想休息~哈哈哈xD)


發佈留言