首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

sqlRest:零代碼將資料庫暴露為 REST 風格 Web 服務

     編輯:Java 相關知識

從資料表到 REST 資源:sqlRest 輕量級資料庫服務化實戰

在 Web 2.0 時代,REST 風格服務已成主流,但傳統資料庫操作仍需大量樣板代碼 (Entity、DAO、Controller)。sqlRest 開源框架打破這一慣例:透過一個 Servlet + 簡單配置,自動將資料表映射為 REST 資源,CRUD 操作直接對應 HTTP 動詞 (GET/POST/PUT/DELETE)。本文完整記錄從部署、配置、測試到 DB2 整合的全流程實踐。

快速啟動:二進制包部署

  1. 下載 sqlrest-0.3.2 (SourceForge 唯一可用版本)
  2. 解壓後將 webapps/sqlrest 複製至 Tomcat webapps/
  3. 啟動 Tomcat,瀏覽 https://localhost:8080/sqlrest 見到資源列表即成功
    sqlRest 初始介面

坑點預警:若 Tomcat 啟動報 UnsupportedClassVersionError (JDK 版本不符),需從 CVS 檢出源碼重新編譯部署。

源碼模式:Eclipse WTP 專案建置 (推薦)

  1. Eclipse CVS 配置連接 :pserver:anonymous@sqlrest.cvs.sourceforge.net:/cvsroot/sqlrest
    CVS 配置
  2. 檢出專案,轉為 Dynamic Web Project (需 WTP 1.5+)
  3. 專案結構參考:
    Eclipse 專案結構
  4. 關鍵配置:Java Build Path → Output folder 設為 WEB-INF/classes
    輸出目錄配置
  5. 部署至 Tomcat 5.5 + JDK 1.5 環境驗證

核心配置:sqlrestconf.xml

<database>
  <jdbc-driver-class>org.hsqldb.jdbcDriver</jdbc-driver-class>  <!-- 預設 HSQLDB -->
  <database-url>jdbc:hsqldb:file:data/exampledb</database-url>
  <user>sa</user>
  <password></password>
</database>

內建範例資料庫 data/exampledb.script 包含 4 張表:CUSTOMER、PRODUCT、INVOICE、ITEM (複合主鍵)。

REST API 速查表

HTTP 方法URL 範例語意SQL 對應
GET/sqlrest列出所有資源SHOW TABLES
GET/sqlrest/INVOICE/列出所有發票SELECT * FROM INVOICE
GET/sqlrest/INVOICE/31/取得單筆發票SELECT * FROM INVOICE WHERE ID=31
POST/sqlrest/CUSTOMER/新增客戶INSERT INTO CUSTOMER ...
PUT/sqlrest/CUSTOMER/22/更新客戶UPDATE CUSTOMER SET ... WHERE ID=22
DELETE/sqlrest/CUSTOMER/22/刪除客戶DELETE FROM CUSTOMER WHERE ID=22

複合主鍵限制:ITEM 表主鍵為 (INVOICEID, ITEMID),但當前版本僅解析第一個參數,/sqlrest/ITEM/1/ 返回該發票所有明細,無法精確到單筆明細。

INVOICEID=1 的所有 ITEM 資源

四大測試策略

  1. 原生 Java HTTP Client:零依賴,適合單元測試
    URL url = new URL("https://localhost:8080/sqlrest/INVOICE/");
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("GET"); // 或 POST/PUT/DELETE
    // 處理回應流...
  2. sqlRest 內建 RestClient:rest.client.RestClient 封裝佳,可輕鬆擴充回傳 String
  3. Firefox Poster 外掛:免寫代碼圖形化發送任意 HTTP 請求,檢視原始回應
    Poster 介面
  4. JUnit + Apache HttpClient 自動化:專案 MainServletTest 覆蓋全介面,可整合 Ant 持續集成

實戰:整合 DB2 資料庫

步驟 1:準備 DB2 環境

  • DB2 8.2 + SAMPLE 資料庫 (db2sampl 建立)
  • JDBC 驅動:db2jcc.jar, db2jcc_license_cu.jar 放入 WEB-INF/lib/

步驟 2:修改 sqlrestconf.xml

<database>
  <jdbc-driver-class>com.ibm.db2.jcc.DB2Driver</jdbc-driver-class>
  <database-url>jdbc:db2:sample</database-url>
  <user>your_user</user>
  <password>your_pwd</password>
</database>

步驟 3:資料庫結構調整 (關鍵)

sqlRest 強制要求資料表有單一欄位主鍵。SAMPLE 資料庫多表無主鍵,需調整:

  1. 僅保留 EMPLOYEE 表
  2. ALTER TABLE EMPLOYEE ADD PRIMARY KEY (EMPNO)
    加主鍵後的 EMPLOYEE 表

步驟 4:重新部署驗證

瀏覽 https://localhost:8080/sqlrest 應顯示 EMPLOYEE 資源,後續可測試 CRUD 全介面。

現存限制與擴展建議

限制影響建議擴展方向
單一資料庫URL 無命名空間區分多庫修改 DatabaseAnalyser 支援多 DataSource,URL 加入 /dbname/ 前綴
複合主鍵支援不全無法精確定位單筆記錄增強 URL 解析器支援多參數 /table/pk1/pk2/
非主鍵表直接報錯啟動失敗,無法共存既有結構修改 DatabaseAnalyser.getDatabaseInfo() 跳過不合規表而非拋異常
無認證授權生產環境不可用整合 Spring Security 或 Servlet Filter 實現 Token/OAuth

架構價值總結

sqlRest 體現 「資料即資源」 核心思想:

  • 消除樣板代碼:無需 Entity/DAO/Controller 三層包裝
  • 標準化介面:統一 HTTP 動詞 + 資源導向 URL
  • 輕量部署:單一 Servlet + 少量配置,無重型框架依賴
  • 遷移友善:現有資料庫結構微調即可服務化

預見未來資料庫將內建 REST 端點 (如同當年內建 SOAP),sqlRest 為此趨勢提供了輕量級參考實作。


本文基於 Eclipse 3.2 + JDK 1.5 + Tomcat 5.5 環境驗證。源碼與配套專案可從文末下載。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved