Liferay支援前後端分離開發(Decoupled Development),採用核心引擎Client Extensions (客戶端擴充機制)。讓系統架構更為開發擴充更加彈型。
Liferay支援前後端分離
Liferay 主要透過以下三個維度,建構完整的分離開發環境。
1. 作為無頭資料來源 (Headless)
除了原有內建的 JSP 或 FreeMarker 套版引擎。Liferay將所有的核心功能(內容管理、使用者權限、商業邏輯)都包裝成 Headless APIs。
- 資料提供:後端只負責產出 JSON 格式的資料。
- 開發者體驗:前端工程師完全不需要安裝 Liferay 環境,只需呼叫 API 即可獲取內容。
2. 以Client Extensions作為載體
Liferay允許開發者將獨立開發的前端應用(如 React 專案)「註冊」到 Liferay 中:
- 獨立部署:前端代碼可以託管在 Liferay 外部(如 AWS S3, Azure Storage 或獨立伺服器)。
- 無縫嵌入:Liferay 透過 client-extension.yaml 設定檔,自動在頁面中注入 JS/CSS,並以 Web Components 的形式顯示。
3. 認證與授權的橋樑
Liferay 內建了 OAuth2 支援,Client Extensions 機制會自動處理 Token 的交換,讓前端應用能安全地代表當前登入使用者去請求 API。
採用的技術框架 (Technology Stack)
在這種架構下,技術框架依前後端,有多重選擇可用:
1. 前端開發框架 (Client-Side)
Liferay 對前端框架採 完全開放 (Framework Agnostic) 的態度。主流選擇包括:
- React / Vue / Angular:最常見的選擇。開發者可將其封裝為 Custom Elements。
- Vanilla JS / Web Components:最輕量化的選擇,具有最佳的跨平台相容性。
- Tailwind CSS / Bootstrap:用於樣式控制。
2. 後端的支援技術 (Platform-Side)
- RESTful APIs (OpenAPI 規範):最主要的通訊標準。Liferay 提供 API Explorer (Swagger UI) 供開發者測試。
- GraphQL:前端需要高度靈活的資料讀取(減少 Request 次數),Liferay 也完整支援 GraphQL 查詢。
- Liferay JS SDK / Clay UI:Liferay 提供了一些工具庫,讓前端能更輕鬆地呼叫 Portal 功能或維持介面一致性。
3. 核心配置與部署工具
- YAML (client-extension.yaml):用來定義擴充功能的屬性、URL 與類型。
- Liferay Workspace:開發者的工作區,支援 Gradle 或 Maven 構建腳本來自動化處理 Client Extensions。
- Node.js & NPM:前端專案的標準構建工具,Liferay 的構建流程可與其高度整合。