Laravel 把 routes 分成4類,分別是 api、channels、console、web
api 與 web 就是定義 API 與前端頁面的路由,channels 是定義 WebSocket 廣播的路由,console 則是用在自定義 artisan 指令。
可以在 command line 輸入 console 預設就有的範例試試看
php artisan inspire
回來看到這次的主題 api routes,請看下列的範例:
Route::get('/test', function (Request $request) {
return response()->json("Hi");
});
這時候在瀏覽器輸入 http://127.0.0.1:8000/api/test 就可以看到 Laravel 回傳的資料了,要注意的是雖然路由指定義的是'/test'
,但定義在 api 檔裡的路由都會在前面加上/api
變成/api/test
。
在這個範例中定義了有 http 方法 (get
)、路由 ('/test'
) 以及一個函式,以下一一講解。
http 方法
get
用於取得資料,瀏覽器開啟網址就是用 get 方法向伺服端提出要求,參數會掛在路由後面,並且 request 封包沒有 body (帶資料的部分)
post
用於將前端的資料傳到後端,可能是新增資料、註冊帳號。
put
用於修改資料,並且是整筆修改,也就是覆蓋掉原本的資料
patch
用於修改資料,較 put 不同的是只修改部分資料,沒有要更動的就維持原樣。
delete
用於刪除資料,request 同 get 方法封包沒有 body,參數只能帶在路由上。
options
這個方法平常不會用到,但如果前端要做跨域請求之前會先發出 options 請求,確認允許跨域請求後,才會發出前端原本想發出的請求。
路由
最簡單的路由就是'/'
或是'/test'
這樣,或者也可以不要斜線開頭'test'
,還可以在路由上用{}
帶參數,例如:
Route::get('/test/{name}', function (Request $request, $name) {
return response()->json(["msg" => "Hi" . $name], 200);
});
// 甚至是
Route::get('/test/{name}/with/{msg}', function (Request $request, $n, $m) {
return response()->json(["msg" => "Hi ".$n.", ". $m], 200);
});
{}
的位置就可以放入參數,函式的部分就用同參數名稱的變數作為參數,就能讀取值了。
函式
在上述範例中,都是直接寫函式在 Route 裡,但是實作上都是導到 Controller 裡的函式,所以來修改一下寫法吧
use App\\Http\\Controllers\\TestController;
Route::get('/test', [TestController::class, 'index']);
這樣就成功導到 UserController 裡的 index 函式了,如果有很多 API 都要導到同一個 Controller 的話還可以用這個寫法。
use App\\Http\\Controllers\\TestController;
Route::controller(TestController::class)->group(function () {
Route::get('/test', 'index');
Route::get('/test/{id}', 'show');
Route::post('/test', 'store');
});
常用指令
php artisan route:list
關於 controller 就在下一篇介紹吧!