iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
0
自我挑戰組

Junior 後端工程師歷程系列 第 7

Day 07: Laravel 打造一組 API 系列 (3) - 第一次 POST 方法與 PUT方法嘗試!

  • 分享至 

  • xImage
  •  

週六繼續來寫文章囉~

前幾天寫的!

Laravel 打造一組 API 系列 (1) - API 簡介與環境建置

Laravel 打造一組 API 系列 (2) - 最 Eazy 的 API 與路由檔內的 Magic

API 繼續來

昨天我們成功取得所有書店內的書籍,今天要來繼續完成其他的路由~

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');

取得書籍 ( GET api/books/{id} )

很 Eazy 的,只要在 BookController.php 內加入

public function show($id)
{
   return Book::find($id);
}

就能根據不同 Id 找到不一樣的書囉~

新增書籍 ( POST api/books )

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 成功!

編輯書籍 ( PUT api/books/{id} )

BookController.php

public function update(Request $request, $id)
{
    Book::find($id)->update($request->all());

    return response()->json(['編輯書籍成功'], 200);
}

PUT 傳入的格式

{
	"name": "編輯測試"
}

PostMan: 路由傳入第一本書 id 來更新看看~

回傳顯示成功了,就用之前定義的 GET 特定書籍 API 來驗證結果吧!

太棒了,成功更新拉~~ /images/emoticon/emoticon07.gif

今天到這囉~明天再把剩下的 Delete 完成吧!

結語

目前先做簡單的實作,之後會更詳細說明:

  • API 定義回傳格式
  • 驗證 Json 資料格式與自訂規則
  • 錯誤回傳

會把 API 改造的更完整一些 /images/emoticon/emoticon34.gif


上一篇
Day 06: Laravel 打造一組 API 系列 (2) - 最 Eazy 的 API 與路由檔內的 Magic
下一篇
Day 08: Laravel 打造一組 API 系列 (4) - 自己建立超方便好用的全局函數吧!
系列文
Junior 後端工程師歷程10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言