看不見的護盾:全量 API 代理
在傳統 Headless CMS 架構中,前端直接呼叫 WordPress REST API——這意味著你的後端位址暴露在每一個網站訪客的瀏覽器 Network 面板中。本專案的做法截然不同——Nitro 服務端接管了所有外部通訊:
| 代理端點 | 用途 | 特殊能力 |
|---|---|---|
/api/graphql | GraphQL 查詢/變更 | SHA-256 快取、請求去重、自動重試、認證透傳 |
/api/salong/v1/* | 自訂 Salong API | 通用代理透傳 |
/api/wp/v2/* | WordPress REST API | 通用代理透傳 |
瀏覽器中只能看到 /api/graphql,永遠看不到 wp-admin 或 wp-json。
認證隔離:JWT 絕不觸碰前端
const token = getCookie(event, 'salong_auth_token')
headers['Authorization'] = `Bearer ${token}`前端只知道「我已登入」,但 Token 對 JavaScript 完全不可見——即使網站被 XSS 攻擊,攻擊者也拿不到認證憑據。
GraphQL 快取引擎:三層防護
第一層:SHA-256 回應快取。 每個公開查詢的結果被 SHA-256 雜湊後存入 Nitro Storage,TTL 可設定(預設 120 秒)。
第二層:飛行中請求去重。 createInFlightRequestPool 將併發請求合併為一次上游呼叫。
第三層:LRU 快取預算控制。 超過 500 條或 32MB 時,按「最久未使用」原則自動淘汰。
請求韌性:自動重試與非關鍵降級
runWithRetry:關鍵請求遇到 429 自動重試,指數退避延遲runNonCriticalAsync:非關鍵請求遇到 429 使用預設降級資料
錯誤安全:絕不洩露堆疊
export function normalizeApiError(err, fallbackMessage, fallbackStatusCode) {
return createError({ statusCode, statusMessage: msg })
}任何伺服器堆疊追蹤、WordPress 內部錯誤都不會洩露到前端。
Nitro 建置最佳化
nitro: {
minify: true,
compressPublicAssets: { gzip: true, brotli: true },
routeRules: {
'/_nuxt/**': { isr: 600, headers: { 'Cache-Control': 'max-age=31536000, immutable' } }
}
}總結
三道防線保護 WordPress 後端:訪問隔離、認證隔離、資訊隔離。同時透過 SHA-256 快取、飛行中去重、LRU 預算控制和智慧重試,將 WordPress 負載降到最低。


