frontend/storefront/js/api-client.js 是真後端請求的統一入口。頁面只呼叫 window.API、BookingAPI 或 AdminAPI,不自行取得 Token、解析 Envelope 或組合後端 URL。
頁面
→ API facade
→ ApiClient._restRequest()
→ AppAuth.getIdToken()
→ Spring Boot
→ 解開 { success, data, meta }
currentUser.getIdToken() 取得 ID Token。dev: Token。auth: 'required':沒有 Token 就在送出請求前拋出 AUTH_TOKEN_UNAVAILABLE。auth: 'optional':有 Token 就帶 Bearer,未登入仍可呼叫公開 API。auth: 'none':登入 session 等不應帶 Bearer 的端點使用。正式 Firebase 初始化完成後注入:
window.AppAuth.configure({ auth: firebaseAuth });
本機臨時設定:
window.AppAuth.configure({
devToken: 'dev:uid-local:local@example.com:google:Local',
});
開發 Token 只保存在目前頁面的記憶體;也可在本機自行設定 AppConfig.AUTH.DEV_TOKEN,但不得提交真實 Token。
const profile = await window.ApiClient._restRequest('/me', {
method: 'GET',
auth: 'required',
});
共用層負責:
AppConfig.API_BASE_URL。data。includeMeta: true 時回傳 { data, meta }。ApiRequestError。ApiRequestError 保留 code、message、details 與 status,頁面不可再從錯誤字串拆後端錯誤碼。
Mock JSON 與 HTML partial 是靜態資源,仍可由 API/layout 載入層使用 fetch;這不等於真後端 REST。頁面新增業務 API 時必須先加到對應 facade。