
概念概覽
graph TD A[Base Controller] -->|繼承| B[UserController] A -->|繼承| C[OrderController] A -->|繼承| D[ProductController] A --- E[returnJsonFormatter] A --- F[統一 HTTP Status Code] A --- G[統一錯誤處理] B --> H[前端 Axios 呼叫] C --> H D --> H H --> I[統一 JSON 回傳格式] I --> J["{ success, message, data }"] style A fill:#f9f,stroke:#333 style E fill:#ffd,stroke:#333 style F fill:#ffd,stroke:#333 style G fill:#ffd,stroke:#333
什麼是 Base Controller?
Base Controller 是後端框架中用來統一處理 API 進出的基礎類別。當前端使用 axios 等工具介接 API 時,需要一致的回傳格式來簡化錯誤處理與資料解析。
為什麼需要 Base Controller?
在沒有明確 middleware 的後端框架中,Base Controller 可以承擔以下責任:
- 統一回傳格式:確保所有 API 回傳相同的資料結構
- HTTP Status Code 規範:確保回傳的狀態碼符合 MDN 規定
- 錯誤訊息一致性:統一錯誤訊息的格式與內容
- Middleware 掛載點:在某些框架中可作為掛載 middleware 的位置
實作範例
以下是在 Laravel 中實作 Base Controller 的範例:
檔案位置: app/Http/Controllers/Controller.php
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function returnJsonFormatter($success, $message, $data, $statusCode) {
return response()->json([
'success' => $success,
'message' => $message,
'data' => $data
], $statusCode);
}
}回傳格式說明
這個範例定義了統一的 JSON 回傳格式,包含四個欄位:
| 欄位 | 說明 |
|---|---|
success | 布林值,表示請求是否成功 |
message | 字串,描述操作結果或錯誤訊息 |
data | 物件或陣列,回傳的實際資料 |
statusCode | 整數,HTTP 狀態碼 |
Proto 實踐對照
Base Controller 在 Proto Django (B2E) 專案中有直接的實際應用。Django REST Framework 的 ViewSet 本質上就是 Base Controller 的概念——所有 API endpoint 繼承同一個基礎類別,統一處理認證、權限與回傳格式。
在 Proto 中,統一回傳格式透過自定義的 Response class 實現,確保所有 API 都回傳 { success, message, data } 結構,讓前端 Axios 可以用同一套邏輯處理。這是前後端分離架構中最基本也最關鍵的約定。
如果你正在設計自己的 Proto,Base Controller 是第一步要建立的基礎設施。
相關文章: