Laravel Resource Routes和API Resource Routes講解

Laravel自学开发發表於2024-05-15

在 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 更為合適。

相關文章