別再寫出連 AI 都看不懂的 API!2026 WordPress REST + JSON 設計原則終極實戰指南

2026/02/4 | API 串接與自動化, WP 開發技巧

告別技術債:2026 年 WordPress REST API 設計的優雅與專業之道

資深工程師 Eric 痛批現今 API 設計亂象,尤其在 WordPress 生態系中,錯誤的設計正嚴重拖垮開發效率。我們強調 RESTful 核心原則:URI 必須使用名詞、善用 HTTP 動詞,並嚴格遵循狀態碼,杜絕「HTTP 200 藏錯誤」的惡習。在 2026 年,優雅的 API 不僅取悅前端開發者,更是與 AI Agent 順暢溝通的基石。設計良好的 API 是程式碼的儀式感,更是可維護性的保障。別讓糾結的程式碼成為您的絆腳石。立即聯繫浪花科技,讓我們為您打造符合現代標準的企業級 API 架構!

需要專業協助?

聯絡浪花專案團隊 →

嗨,我是 Eric,浪花科技的資深工程師。今天我要來聊聊一個讓我血壓升高的話題:API 設計

現在是 2026 年了,我前幾天接手了一個被遺棄的專案,打開它的 API 文件(如果有那種東西的話),我差點把剛沖好的手沖咖啡噴在螢幕上。為什麼?因為我看到了一個 Endpiont 叫做 /getAllDataAndDoSomething_v2_final,而且不管發生什麼錯誤,它永遠回傳 HTTP 200 OK,然後在 JSON 裡藏一個 "error": "true"

各位,寫程式是一種藝術,不是在煮大雜燴。特別是在 WordPress 的世界裡,REST API 已經是與外部系統溝通的標準語言。如果你的 API 設計得像義大利麵一樣糾纏不清,不只前端工程師會恨你,現在連負責串接的 AI Agent 都會因為讀不懂你的 Schema 而罷工。

這篇文章不談高深的哲學,我們談實戰。我們要談如何用 WordPress 內建的 register_rest_route 寫出優雅、標準、符合 REST + JSON 原則的 API。這不僅是為了讓程式碼好看,更是為了可維護性與擴展性。

為什麼 2026 年我們還在堅持 REST?

我知道你們想說什麼:「Eric,現在不是都在用 GraphQL 或是 tRPC 了嗎?」

沒錯,那些技術很棒。但在 WordPress 的生態系中,REST API 依然是王者。為什麼?因為它利用了 HTTP 協議本身的特性(如快取、狀態碼),而且對於 Headless 架構來說,REST 的資源導向(Resource-Oriented)概念是最容易被理解與標準化的。

特別是在 2026 年,我們大量的開發工作已經交給 AI 輔助。AI 對於標準化的 REST 結構理解能力極強。一個設計良好的 REST API,配合清晰的 JSON 回傳格式,可以讓 Cursor 或 GitHub Copilot 在幾秒鐘內幫你生成完整的前端串接程式碼。反之,如果你的 API 毫無邏輯,AI 也救不了你。

核心原則一:URI 是名詞,不是動詞

這是我最常看到的錯誤。REST 的核心在於「資源(Resource)」。你的 URL 應該代表「東西」,而不是「動作」。

❌ 錯誤的設計(像在寫 RPC):

  • /wp-json/my-plugin/get-products
  • /wp-json/my-plugin/create-new-order
  • /wp-json/my-plugin/deleteUser

✅ 正確的設計(RESTful):

  • /wp-json/my-shop/v1/products (取得產品列表)
  • /wp-json/my-shop/v1/orders (新增訂單)
  • /wp-json/my-shop/v1/users/123 (刪除特定使用者)

看出差別了嗎?URL 保持乾淨,動作交給 HTTP Method 來決定。

核心原則二:善用 HTTP 動詞,別再一招 POST 打天下

很多新手工程師(甚至一些資深的懶惰工程師)喜歡把所有請求都用 POST。他們會說:「啊瀏覽器有時候會快取 GET 請求很麻煩耶。」

聽我一句勸,別這樣做。HTTP 協議設計這些動詞是有意義的,正確使用它們可以讓你的 API 語意清晰,並且讓 CDN 和中間層知道該如何處理快取。

  • GET:讀取資源。這是「安全」且「冪等(Idempotent)」的操作,不該改變伺服器狀態。
  • POST:建立新資源。通常不具備冪等性。
  • PUT:完整更新資源(覆蓋)。
  • PATCH:部分更新資源(只改這幾個欄位)。
  • DELETE:刪除資源。

在 WordPress 中註冊路由時,請務必指定正確的 methods

register_rest_route( 'my-shop/v1', '/products/(?P<id>\d+)', array(
    'methods'  => 'PATCH',
    'callback' => 'update_product_price',
    'permission_callback' => function() {
        return current_user_can( 'edit_products' );
    }
));

核心原則三:JSON 回傳格式的「信封模式」與命名慣例

現在來到重點了:JSON。API 的回應不應該只是一坨裸露的數據。你需要一個標準的結構,我們通常稱為「信封(Envelope)」。

1. 統一的命名風格 (Case Convention)

WordPress 核心與資料庫欄位習慣使用 snake_case (如 post_title),但在 JavaScript 前端世界(React/Vue)習慣使用 camelCase (如 postTitle)。

在 WordPress REST API 開發中,我強烈建議遵循 WordPress 的標準,保持 snake_case。為什麼?因為當你使用 wp_insert_post 或處理資料庫時,你不需要在那邊轉來轉去。如果前端需要 camelCase,讓他們用 Axios 的攔截器去轉換,或者使用像 humps 這樣的庫。後端保持一致性最重要。

2. 結構化的回應

不要直接回傳一個陣列。你的 JSON 應該包含元數據(Metadata),這對於分頁(Pagination)特別重要。

✅ 推薦的 JSON 結構:

{
  "success": true,
  "data": [
    {
      "id": 101,
      "product_name": "藍色馬克杯",
      "price": 350
    }
  ],
  "meta": {
    "total_count": 50,
    "total_pages": 5,
    "current_page": 1
  }
}

核心原則四:HTTP 狀態碼不是裝飾品

這是我最不能忍受的地雷。請不要在發生錯誤時回傳 HTTP 200,然後在 JSON 裡寫 "status": "error"

HTTP 狀態碼是全球通用的語言:

  • 200 OK:成功。
  • 201 Created:成功建立資源(POST 回應)。
  • 400 Bad Request:客戶端送來的資料格式不對(例如 JSON 缺欄位)。
  • 401 Unauthorized:你沒登入,我不認識你。
  • 403 Forbidden:我認識你,但你權限不足(例如訂閱者想刪文章)。
  • 404 Not Found:找不到資源。
  • 429 Too Many Requests:你太急了,被 Rate Limit 擋下來了。
  • 500 Internal Server Error:程式碼炸了,這是我的錯。

在 WordPress 中,你可以透過 WP_Error 來回傳正確的狀態碼:

if ( empty( $request['price'] ) ) {
    return new WP_Error( 
        'missing_price', 
        '價格欄位是必填的', 
        array( 'status' => 400 ) 
    );
}

這樣前端接到 400,就會進入 catch 區塊,邏輯清晰又乾淨。

2026 年的進階思維:為 AI 準備的 Context 與 Schema

在 2026 年,很多時候呼叫你 API 的不是人類寫的程式,而是 AI Agent。為了讓 AI 能更有效率地理解你的 API,有兩點非常重要:

  1. Schema 定義:在 register_rest_route 中,務必定義 schema 回呼函式。這會自動出現在 OPTIONS 請求中,讓 AI 知道這個端點接受什麼參數、回傳什麼格式。
  2. 情境式過濾 (Context Filtering):支援 _fields 參數。AI 呼叫 API 時往往需要節省 Token,如果你的 API 支援只回傳需要的欄位(例如 GET /products?_fields=id,price),這會大幅提升 AI 處理的效能。

總結:好的 API 是優雅的溝通

設計 API 不只是把資料庫撈出來噴成 JSON。它是一種溝通介面,體現了你對系統架構的理解。遵循 REST 原則、使用正確的 HTTP 動詞與狀態碼、規範 JSON 結構,這些看似龜毛的要求,其實是在為未來的你自己(和接手你程式碼的可憐人)省下無數的加班夜晚。

寫程式要有「儀式感」,把每一個 Endpoint 當作一個精緻的產品來設計,這才是一個資深工程師該有的素養。

延伸閱讀

想更深入了解如何打造堅固的 WordPress API 架構嗎?建議你參考以下這幾篇我整理的實戰指南:

你的企業系統串接遇到瓶頸了嗎?還是 API 效能總是不如預期?別讓技術債拖垮你的業務發展。

立即聯繫浪花科技,讓我們為您打造企業級的 API 架構

常見問題 (FAQ)

Q1: WordPress REST API 一定要使用 WP 內建的路由註冊方式嗎?可以用自製的 PHP 檔案嗎?

強烈建議使用 register_rest_route。因為它自動處理了命名空間、路由正則表達式匹配、權限驗證掛勾以及 JSON 回應的格式化。自己寫 PHP 檔案處理 AJAX 或 API 請求,不僅有安全風險(容易漏掉 Nonce 或權限檢查),也無法享受 WordPress 核心提供的快取與擴展功能。

Q2: JSON 回傳時,日期格式該怎麼處理最標準?

建議一律使用 ISO 8601 格式(例如:2026-05-20T14:30:00Z)。這是所有程式語言(包括 JavaScript)都能輕鬆解析的標準格式。千萬不要回傳像 “2026年5月20日” 這種包含本地化語言的字串,這會讓前端解析變得非常痛苦。

Q3: 如果我的 API 資料量很大,該怎麼優化 JSON 大小?

除了使用 Gzip/Brotli 壓縮傳輸外,設計 API 時應支援 _fields 參數,讓客戶端只請求需要的欄位。另外,避免在列表頁(List Endpoint)回傳完整的 HTML 內容(如 content.rendered),這通常是造成 JSON 肥大的主因。

 
立即諮詢,索取免費1年網站保固