cover

概念概覽

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 是第一步要建立的基礎設施。

相關文章:


延伸閱讀