週六繼續來寫文章囉~
前幾天寫的!
Laravel 打造一組 API 系列 (1) - API 簡介與環境建置
Laravel 打造一組 API 系列 (2) - 最 Eazy 的 API 與路由檔內的 Magic
昨天我們成功取得所有書店內的書籍,今天要來繼續完成其他的路由~
URI | description | HTTP Method |
---|---|---|
api/books | 文章列表 | GET |
api/books/{id} | 特定文章 | GET |
api/books | 新增文章 | POST |
api/books/{id} | 更新文章 | PUT |
api/books/{id} | 刪除文章 | DELETE |
我們的路由定義:
Route::get('books', 'BookController@index');
Route::get('books/{id}', 'BookController@show');
Route::post('books', 'BookController@store');
Route::put('books/{id}', 'BookController@update');
Route::delete('books/{id}', 'BookController@destroy');
很 Eazy 的,只要在 BookController.php 內加入
public function show($id)
{
return Book::find($id);
}
就能根據不同 Id 找到不一樣的書囉~
BookController.php
public function store(Request $request)
{
Book::create($request->all());
return response()->json(['新增書籍成功'], 200);
}
POST 傳入的格式
{
"name": "我的新書",
"author": "KenBro",
"price": 500,
"publication_date": "2019-09-21"
}
結過噴錯了~
在呼叫 create function 時,記得要在 Model 內新增 $fillable 屬性,如下:
class Book extends Model
{
protected $fillable = ['name', 'author', 'price', 'publication_date'];
}
[原因] fillable 就像是白名單,可以決定哪些資料表欄位是允許被新增或修改的,對資料庫做一層保護的概念。
OK,Debug 成功!
BookController.php
public function update(Request $request, $id)
{
Book::find($id)->update($request->all());
return response()->json(['編輯書籍成功'], 200);
}
PUT 傳入的格式
{
"name": "編輯測試"
}
PostMan: 路由傳入第一本書 id 來更新看看~
回傳顯示成功了,就用之前定義的 GET 特定書籍 API 來驗證結果吧!
太棒了,成功更新拉~~
今天到這囉~明天再把剩下的 Delete 完成吧!
目前先做簡單的實作,之後會更詳細說明:
會把 API 改造的更完整一些