在 Laravel 中,Resource Routes 和 API Resource Routes 是兩種用於定義 RESTful 路由的便捷方法。它們幫助開發者快速建立遵循 RESTful 標準的路由集合,分別適用於普通 Web 應用和 API 應用。
Resource Routes
Resource Routes 是為傳統的 Web 應用設計的,它們生成了一組常見的 CRUD 路由,同時適用於 Web 中介軟體組。要定義 Resource Routes,可以使用 Route::resource
方法。下面是一個示例:
use Illuminate\Support\Facades\Route;
Route::resource('posts', 'PostController');
這條命令會生成以下七個路由:
HTTP Method | URL | Action | Route Name |
---|---|---|---|
GET | /posts | index | posts.index |
GET | /posts/create | create | posts.create |
POST | /posts | store | posts.store |
GET | /posts/ | show | posts.show |
GET | /posts/{post}/edit | edit | posts.edit |
PUT/PATCH | /posts/ | update | posts.update |
DELETE | /posts/ | destroy | posts.destroy |
這些路由適用於處理 Web 請求,因此會載入 web
中介軟體組,預設情況下包含會話管理、CSRF 保護等功能。
API Resource Routes
API Resource Routes 類似於 Resource Routes,但它們是為 API 設計的,通常不包含會話和 CSRF 保護。使用 Route::apiResource
方法可以定義 API Resource Routes。
use Illuminate\Support\Facades\Route;
Route::apiResource('posts', 'PostController');
這條命令生成的路由與 Route::resource
大致相同,但省略了用於顯示和編輯的路由:
HTTP Method | URL | Action | Route Name |
---|---|---|---|
GET | /posts | index | posts.index |
POST | /posts | store | posts.store |
GET | /posts/ | show | posts.show |
PUT/PATCH | /posts/ | update | posts.update |
DELETE | /posts/ | destroy | posts.destroy |
比較與選擇
-
Resource Routes:
- 包含所有七個 RESTful 動作:index、create、store、show、edit、update、destroy。
- 適用於傳統 Web 應用,需要會話、CSRF 保護等功能。
- 使用
Route::resource
方法定義。
-
API Resource Routes:
- 省略 create 和 edit 路由,僅包含 index、store、show、update、destroy。
- 適用於 API 應用,不需要會話和 CSRF 保護。
- 使用
Route::apiResource
方法定義。
示例:定義和使用
Resource Routes 示例
控制器方法示例:
class PostController extends Controller
{
public function index()
{
// 顯示所有資源
}
public function create()
{
// 顯示建立資源的表單
}
public function store(Request $request)
{
// 儲存新資源
}
public function show($id)
{
// 顯示單個資源
}
public function edit($id)
{
// 顯示編輯資源的表單
}
public function update(Request $request, $id)
{
// 更新資源
}
public function destroy($id)
{
// 刪除資源
}
}
API Resource Routes 示例
控制器方法示例:
class PostController extends Controller
{
public function index()
{
// 返回所有資源
}
public function store(Request $request)
{
// 儲存新資源
}
public function show($id)
{
// 返回單個資源
}
public function update(Request $request, $id)
{
// 更新資源
}
public function destroy($id)
{
// 刪除資源
}
}
選擇哪種路由定義方法取決於你的應用需求。如果你開發的是一個需要檢視和表單的傳統 Web 應用,使用 Resource Routes。如果你開發的是 RESTful API 服務,使用 API Resource Routes 更為合適。