2025/08/23

EXARC (Express ARC JS Starter Kit) 為 Delphi 開發者打造的現代化 Web 開發框架

EXARC (Express ARC JS Starter Kit)
-- 為 Delphi 開發者打造的現代化 Web 開發框架

🎯 給熟悉 DataSnap、MVC、WebBroker 的您

如果您曾經使用過 Delphi DataSnap REST 的代理自動生成功能,或是體驗過 Delphi MVC Web Framework 的路由機制,那麼 EXARC 將會讓您感到非常熟悉。它將 Delphi 開發中最優雅的概念帶到了現代 JavaScript 生態系統中。


🔄 從 Delphi 到 JavaScript:相似的開發哲學

DataSnap REST 的現代化演進

還記得 Delphi DataSnap 如何自動為您的伺服器方法生成用戶端代理嗎?EXARC 採用了相同的理念:

Delphi DataSnap EXARC 相似度
伺服器方法定義 Express 路由定義 ✅ 相同概念
自動生成用戶端代理 自動生成 apiProxy.js ✅ 相同機制
型別安全的呼叫 語義化的 async 呼叫 ✅ 相同體驗
內建認證支援 JWT 認證中介軟體 ✅ 相同功能
// Delphi DataSnap 伺服器方法
function TServerMethods.EchoMessage(const AMessage: string): string;
begin
  Result := 'Echo: ' + AMessage;
end;

// 自動生成的用戶端代理呼叫
ClientModule.ServerMethods.EchoMessage('Hello');
// EXARC Express 路由定義
app.get('/api/echomsg/:msg', (req, res) => {
    res.json({ echoed: req.params.msg });
});

// 自動生成的前端代理呼叫
await apiProxy.echomsg('Hello');

MVC Web Framework 的路由理念

熟悉 Delphi MVC 的路由屬性嗎?EXARC 採用了相似但更簡潔的方式:

// Delphi MVC Controller
[MVCPath('/api/users')]
[MVCHTTPMethod([httpGET])]
function GetUserList: TObjectList<TUser>;
// EXARC Express 路由
app.get('/api/users/list', (req, res) => {
    res.json(getUserList());
});
// 自動生成: apiProxy.usersList()

💡 為什麼 Delphi 開發者會愛上 EXARC?

1. 熟悉的開發模式

您已經習慣了 Delphi 的「定義一次,處處可用」理念:

  • DataSnap: 定義伺服器方法 → 自動生成用戶端代理
  • EXARC: 定義 Express 路由 → 自動生成前端代理
  • 結果: 相同的開發體驗,但擁抱現代 Web 技術

2. 強型別思維的延續

雖然是 JavaScript,但 EXARC 透過 JSDoc 和自動生成機制,提供了接近強型別的開發體驗:

/**
 * 建立使用者資料
 * @param {Object} userData - 使用者資訊
 * @param {string} userData.name - 使用者姓名
 * @param {string} userData.email - 電子郵件
 * @returns {Promise<Object>} 建立結果
 */
app.post('/api/users/create', (req, res) => {
    // 業務邏輯實作
});

// 前端呼叫時會有清楚的參數提示
await apiProxy.usersCreate({
    name: "John Doe",
    email: "john@example.com"
});

3. 內建的測試和除錯工具

就像 Delphi IDE 的整合除錯環境,EXARC 提供內建的 API 測試器:

  • 自動掃描所有 API 端點(類似 DataSnap 的伺服器方法瀏覽器)
  • 即時參數輸入和測試(類似 Delphi 的 Method Invoker)
  • 即時回應查看(類似 REST Debugger)

🚀 技術架構對比

從 WebBroker 到 Express.js

概念 Delphi WebBroker EXARC Express.js
HTTP 伺服器 TWebModule + HTTP.sys Node.js + Express
路由處理 WebActionItem app.get/post/put/delete
中介軟體 WebModule Events Express Middleware
靜態檔案 DocumentRoot express.static
會話管理 TWebSession JWT Token

從 DataSnap 到 EXARC

// Delphi DataSnap 架構
TServerContainer -> TDSServer -> TServerMethods
                              -> Auto-generated Client Proxy
// EXARC 架構
Express Router -> API Routes -> Auto-generated apiProxy.js
                            -> Dynamic API Invoker

🔧 實際開發對比

Delphi DataSnap 開發流程

// 1. 定義伺服器方法
function TServerMethods.GetCustomerOrders(CustomerID: Integer): TJSONArray;
begin
  // 實作業務邏輯
end;

// 2. 編譯專案,自動更新用戶端代理

// 3. 用戶端呼叫
ClientModule.ServerMethods.GetCustomerOrders(123);

EXARC 開發流程

// 1. 定義 Express 路由
app.get('/api/customers/:id/orders', (req, res) => {
    const customerId = req.params.id;
    // 實作業務邏輯
    res.json(getCustomerOrders(customerId));
});

// 2. 儲存檔案,自動更新前端代理

// 3. 前端呼叫
await apiProxy.customersOrders(123);

相似度:95%!


🌟 EXARC 相比 Delphi 的優勢

1. 現代化的生態系統

  • 豐富的套件庫: npm 生態系統 vs GetIt Package Manager
  • 跨平台部署: Linux/Windows/macOS vs Windows 主要
  • 容器化支援: Docker 原生支援 vs 需要額外配置

2. 前端技術選擇自由

  • 多框架支援: React, Vue, 原生 JS vs 主要是 Delphi 用戶端
  • 響應式設計: 內建 Mobile-first 設計
  • 現代 UI 框架: Tailwind, Bootstrap 等

3. 開發工具整合

  • VS Code 完整支援: IntelliSense, 除錯, Git 整合
  • 熱重載: 程式碼變更即時生效
  • DevTools: 強大的瀏覽器除錯工具

4. 部署和維運

  • 雲端原生: 天然支援 AWS, Azure, GCP
  • CI/CD 整合: GitHub Actions, GitLab CI 等
  • 監控和日誌: 豐富的 APM 工具

🎯 遷移建議:從 Delphi 到 EXARC

階段一:概念對應

  • DataSnap 伺服器方法 → Express 路由
  • ClientDataSet → JSON 資料處理
  • WebBroker Actions → Express 中介軟體
  • ISAPI/CGI → Node.js HTTP Server

階段二:逐步遷移

  1. API 層先行: 將 DataSnap REST 服務改寫為 Express API
  2. 保持資料庫: 繼續使用現有的 SQL Server/Oracle/FireDAC
  3. 前端現代化: 逐步將 VCL/FMX 用戶端改為 Web 介面
  4. 認證統一: 從 Session-based 遷移到 JWT

階段三:現代化升級

  • 導入 TypeScript (可選)
  • 整合現代 CSS 框架
  • 實作 PWA 功能
  • 加入自動化測試

📊 成本效益分析

Delphi 開發 vs EXARC 開發

項目 Delphi 生態 EXARC + Node.js
授權成本 Delphi Professional: $1,500+ 完全免費
伺服器授權 Windows Server 授權 Linux 免費
部署成本 IIS + Windows Docker + 雲端 (更便宜)
維護成本 需要 Delphi 專家 JavaScript 開發者更易找
學習曲線 對 Delphi 開發者: 低 中等 (但概念相似)

🛠️ 實作範例:從 DataSnap 到 EXARC

Delphi DataSnap 範例

unit ServerMethodsUnit;

interface

uses
  SysUtils, Classes, DSServer, DSAuth, DataSnap.DSProviderDataModuleAdapter,
  Datasnap.DSClientMetadata, Data.FireDACJSONReflect, Data.DB;

type
  TServerMethods = class(TDSServerModule)
  private
  public
    function GetUserProfile(UserID: Integer): TJSONObject;
    function UpdateUserProfile(UserID: Integer; ProfileData: TJSONObject): Boolean;
  end;

implementation

function TServerMethods.GetUserProfile(UserID: Integer): TJSONObject;
begin
  // 實作取得使用者資料邏輯
  Result := TJSONObject.Create;
  Result.AddPair('id', TJSONNumber.Create(UserID));
  Result.AddPair('name', 'John Doe');
end;

function TServerMethods.UpdateUserProfile(UserID: Integer; ProfileData: TJSONObject): Boolean;
begin
  // 實作更新使用者資料邏輯
  Result := True;
end;

EXARC 對應實作

// server.js
const express = require('express');
const app = express();

app.use(express.json());

// 對應 TServerMethods.GetUserProfile
app.get('/api/users/:id/profile', (req, res) => {
    const userId = parseInt(req.params.id);
    
    // 實作取得使用者資料邏輯
    const userProfile = {
        id: userId,
        name: 'John Doe',
        email: 'john@example.com'
    };
    
    res.json(userProfile);
});

// 對應 TServerMethods.UpdateUserProfile
app.put('/api/users/:id/profile', (req, res) => {
    const userId = parseInt(req.params.id);
    const profileData = req.body;
    
    // 實作更新使用者資料邏輯
    const success = updateUserProfile(userId, profileData);
    
    res.json({ success: success });
});

app.listen(3000);

自動生成的前端代理

// apiProxy.js (自動生成)
export const apiProxy = {
    /**
     * 取得使用者資料
     * @param {number} id - 使用者 ID
     * @returns {Promise<Object>} 使用者資料
     */
    usersProfile: async (id) => {
        return handleApiCall(api.get, `users/${id}/profile`);
    },

    /**
     * 更新使用者資料
     * @param {number} id - 使用者 ID  
     * @param {Object} data - 更新資料
     * @returns {Promise<Object>} 更新結果
     */
    usersProfileUpdate: async (id, data) => {
        return handleApiCall(api.put, `users/${id}/profile`, data);
    }
};

// 使用方式 (類似 DataSnap 用戶端代理)
const profile = await apiProxy.usersProfile(123);
const result = await apiProxy.usersProfileUpdate(123, { name: 'Jane Doe' });

🎉 結論:擁抱現代化,保持熟悉感

EXARC 為 Delphi 開發者提供了一條平滑的現代化遷移路徑:

保留 Delphi 的優雅設計理念 - 自動化、強型別思維、整合開發體驗
擁抱現代 Web 技術 - JavaScript 生態、雲端原生、跨平台部署
降低學習成本 - 相似的概念映射、熟悉的開發流程
提升競爭力 - 更低的成本、更大的人才庫、更好的擴展性

立即開始您的現代化之旅

# 30 秒體驗 EXARC
npx degit Eden5Wu/EXARC my-modern-api
cd my-modern-api && npm install && npm run dev

# 訪問 http://localhost:8893/apiProxyInvoker.html
# 體驗類似 DataSnap Method Invoker 的測試工具!

從 Delphi 到 EXARC,不是放棄過去,而是站在巨人的肩膀上擁抱未來。 🚀


📞 技術支援

  • GitHub: Eden5Wu/EXARC
  • 遷移指南: [專為 Delphi 開發者準備的詳細文檔]
  • 範例專案: [DataSnap 到 EXARC 的完整遷移範例]

讓我們一起將 Delphi 的優雅帶入現代 Web 開發! 💪

EXARC (Express ARC JS Starter Kit) 革命性的前後端開發框架

 EXARC (Express ARC JS Starter Kit) 革命性的前後端開發框架


🚀 告別重複工作,專注核心價值

EXARC 是一個基於 Express.js 的輕量級後端開發模板,專為追求高效開發體驗的團隊而設計。它徹底改變了傳統的前後端開發模式,讓您只需專注於業務邏輯的實現,其餘一切交給自動化處理。


💡 核心理念:後端驅動,前端自動同步

以後端為唯一真實來源 (Backend as the Single Source of Truth)

傳統開發中,前後端 API 介面需要分別維護,容易造成不同步問題。EXARC 創新地將這個流程完全自動化:

  • 後端定義路由 → 前端 API 代理自動生成
  • API 文件自動更新 → 測試工具即時同步
  • 零手動配置 → 開箱即用的完整解決方案

🎯 解決的核心痛點

1. 前後端介面不同步

  • 傳統方式:手動維護前端 fetch/axios 請求,容易與後端脫節
  • EXARC 方式:後端路由變更,前端代理自動更新

2. 重複的樣板程式碼

  • 傳統方式:每個 API 都需要寫相似的請求處理邏輯
  • EXARC 方式:一次定義,處處可用的語義化 API 呼叫

3. API 測試與文件維護

  • 傳統方式:需要額外工具如 Postman,文件容易過時
  • EXARC 方式:內建動態 API 調用器,測試與文件自動同步

4. 認證機制複雜性

  • 傳統方式:前後端認證邏輯分散,難以維護
  • EXARC 方式:統一的 JWT 認證流程,可一鍵切換啟用/停用

⚡ 核心特性

🔄 自動化 API 代理生成

// 後端:只需定義 Express 路由
app.get('/api/users/profile', (req, res) => {
    res.json({ user: 'profile data' });
});

// 前端:自動生成語義化呼叫
const profile = await apiProxy.usersProfile();

🧪 動態 API 測試器

  • 自動讀取後端路由,生成互動式測試介面
  • 支援 JSDoc 註解解析,提供完整的參數說明
  • 智能判斷輸入類型(JSON/純文字),零配置使用

🔐 彈性認證系統

  • 基於 JWT 的無狀態認證
  • 環境變數一鍵切換認證開關
  • 前後端獨立控制登入 UI 顯示

🌐 多框架支援

內建完整的範例,支援主流前端技術:

  • 原生 JavaScript - 輕量級實作
  • React - 現代組件化開發
  • Vue.js - 漸進式框架整合
  • jQuery Mobile - 移動端快速原型

📈 開發效率提升

傳統開發流程 vs EXARC 流程

階段 傳統方式 EXARC 方式 時間節省
API 定義 後端路由 + 前端請求函式 僅需後端路由 50%
介面同步 手動更新前端代碼 自動生成同步 90%
API 測試 配置 Postman 等工具 內建動態測試器 70%
文件維護 手動更新 API 文件 JSDoc 自動解析 80%

實際開發體驗

// 🎯 EXARC:四步驟完成 API 開發

// 1. 後端定義路由(唯一需要手寫的部分)
app.post('/api/orders/create', (req, res) => {
    const order = createOrder(req.body);
    res.json({ success: true, order });
});

// 2. 自動生成前端代理(無需任何操作)
// ✨ 伺服器重啟時自動更新 apiProxy.js

// 3. 前端直接使用(語義化呼叫)
const result = await apiProxy.ordersCreate(orderData);

// 4. 動態測試器自動更新(無需任何操作)
// ✨ 訪問 /apiProxyInvoker.html 即可測試

🏗️ 架構優勢

智能文件解析

  • 自動掃描 Express 路由堆疊
  • 將 REST 路徑轉換為駝峰式函式名稱
  • JSDoc 註解自動提取並生成文件

零配置哲學

  • 使用 degit 一鍵複製專案模板
  • npm run dev 即可啟動完整開發環境
  • 內建 nodemon 配置,避免無限重啟問題

生產就緒

  • 環境變數管理
  • 嚴格的 JWT 認證中介軟體
  • 完整的錯誤處理機制

🎨 適用場景

完美適合

  • 快速原型開發 - 將想法迅速轉化為可用產品
  • 中小型專案 - 需要高效開發流程的商業應用
  • API 優先設計 - 重視前後端分離的現代化項目
  • 團隊協作 - 需要統一開發規範的多人項目

技術團隊

  • 全端工程師 - 一人完成前後端開發
  • 前端開發者 - 快速建立後端 API 支援
  • 後端開發者 - 無需關心前端 API 調用細節
  • 專案經理 - 需要快速交付 MVP 的敏捷團隊

🚀 快速開始

30 秒啟動專案

# 1. 複製模板
npx degit Eden5Wu/EXARC my-awesome-project

# 2. 安裝依賴
cd my-awesome-project && npm install

# 3. 啟動開發
npm run dev

# 4. 開始編碼!
# 後端:編輯 server.js 新增 API
# 前端:直接使用 apiProxy.methodName()
# 測試:訪問 http://localhost:8893/apiProxyInvoker.html

📊 為什麼選擇 EXARC?

對比其他解決方案

特性 EXARC 傳統 Express Next.js API tRPC
學習曲線 ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
自動化程度 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐
開發速度 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐
靈活性 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐
內建測試 ⭐⭐⭐⭐⭐ ⭐⭐

🎯 結語

EXARC 不只是一個開發框架,更是一種開發哲學的體現。

它相信開發者的時間應該花在創造價值上,而不是重複性的基礎設施建設。通過極致的自動化和智能化,EXARC 讓您能夠:

  • 🎯 專注業務邏輯 - 將創意直接轉化為代碼
  • 提升開發效率 - 用更少的時間交付更多價值
  • 🛡️ 降低維護成本 - 自動同步機制避免技術債務
  • 🚀 加速產品迭代 - 從想法到部署的最短路徑

選擇 EXARC,選擇更智慧的開發方式。


📞 立即開始

  • GitHub: Eden5Wu/EXARC
  • 快速開始: npx degit Eden5Wu/EXARC your-project-name
  • 授權: MIT License
  • 支援: Issues & Discussions on GitHub

讓 EXARC 成為您下一個專案的加速器! 🚀