Spring Data 團隊很高興宣佈使用 RESTful 語義將領域物件匯出到 Web 的下一步重要進展:Spring Data REST 1.1.0.M1 現已在 SpringSource 里程碑倉庫中可用。
Spring Data REST 主頁 | GitHub 上的原始碼 | 參考文件
將領域物件匯出到 Web
Spring Data REST 是一組 Spring MVC 元件,您可以將其新增到自己的 Spring MVC 應用中,使用 RESTful、HATEOAS 語義將您的 Spring Data Repositories 匯出到 Web。透過將 Repository 匯出到可以通過幾種不同方式配置的 RESTful URL,它提供了一個一致的互動 API。
Spring Data REST 透過字面上只寫一行程式碼來定義一個擴充套件 Spring Data 的 CrudRepository
介面的介面,從而支援頂級實體(由 Spring Data Repository 直接管理的那些領域物件)的 CRUD 操作。完成後,您的實體就具備了完整的 RESTful 語義。您可以使用遵循 HATEOAS 原則、可發現的標準 URL 建立新實體、更新現有實體和刪除它們。這意味著訪問您的 Spring Data REST 應用的使用者代理無需預先了解您正在匯出哪些資源。它可以透過對 JSON 中提供的 URL 進行連續呼叫來發現存在哪些實體以及這些實體上存在哪些關係。這些“連結”是 HATEOAS REST 應用的真正基礎和力量所在。
徹底的改變
版本 1.1 幾乎是徹底重寫。它不僅比 1.0 更易於配置,並且更好地符合 Spring 3.2 過渡對 Spring MVC 的期望,而且 Spring Data REST 內部最大的變化在於它現在支援 JPA 以外的其他型別的 Spring Data Repository 實現。無論使用何種底層資料儲存,CRUD 和關係管理(如果資料儲存支援)的 HTTP 語義保持不變。
這意味著現在可以在同一個 Spring Data REST 應用中匯出 JPA 實體和 MongoDB 實體,並使用通用的 URL 結構以及所有實體和集合的標準 Spring HATEOAS 資源表示來訪問這些實體。訪問這些 RESTful URL 的使用者代理無需瞭解底層實體由哪個資料儲存管理,最重要的是,您無需編寫任何程式碼即可獲得該功能!
MongoDB 支援
Spring Data REST 1.1 現在支援匯出 MongoDB CrudRepository
實現。適用於 MongoDB @Document
實體的 HTTP 語義與適用於 JPA 實體的相同。當然支援 GET、POST、PUT、DELETE,@DBRef
也支援。您可以使用 GET、POST、PUT 和 DELETE 檢視和管理兩個文件之間的關係,並且可以根據您的 @Query
定義匯出查詢方法。請參考 spring-data-mongodb 參考文件,瞭解物件對映與 JPA 風格對映的不同之處以及查詢定義的工作原理的完整詳細資訊。
Gemfire 支援
Spring Data REST 1.1 現在支援將使用高效能 Gemfire 資料庫 的實體匯出到不同的 Region。閱讀 Spring Data Gemfire 文件,瞭解廣泛的配置選項以及 Gemfire 中的 POJO 對映與其他對映技術的不同之處的完整解釋。
接下來將支援 Neo4J
Spring Data REST 1.1 現已準備好在下一版本 spring-data-neo4j 2.3 中支援 Neo4J GraphRepository
。當該版本正式釋出(應與 Spring Data REST 1.1 RELEASE 同時或之前釋出)時,您將能夠使用標準的 HATEOAS 語義訪問 @NodeEntity
及其關係,就像您使用其他資料儲存一樣。
將其新增到現有應用中
Spring Data REST 的設計方式允許您,如果願意,為 Spring Data REST 應用建立一個完整的應用。畢竟它只是一個標準的 Spring MVC webapp。但當您將 Spring Data REST 新增到您自己的服務中時,事情就會變得非常有趣。
Spring HATEOAS 作者 Oliver Gierke 建立了一個示例應用,演示了在現代 Web 應用中使用 HATEOAS 原則。它被稱為 spring-restbucks,是 Rest 服務系統神學中描述的 Restbucks 應用的一個實現:Jim Webber、Savas Parastatidis 和 Ian Robinson 合著的 REST in Practice。
混合 REST 服務
透過將 Spring Data REST 與您的其他 RESTful 服務混合使用,您可以實現 Spring Data REST 匯出的領域物件(無需編寫任何程式碼即可暴露的物件)與那些不代表實際實體而是代表流程的服務之間的無縫整合。您可以在 spring-restbucks 應用中看到支付服務如何與領域物件 CRUD 互動的示例,其中信用卡支付處理由自定義控制器處理,而物件 CRUD 由 Spring Data REST 處理。您的自定義控制器實際上可以 piggyback 到 Spring Data REST URL 上,以便在整個應用中保持一致且簡單的 URL 結構,無論該 URL 是指您的自定義控制器、Spring Data REST JPA Repository 還是任何其他支援的 Repository 風格。
並非排他性
使用 Spring Data REST 並非非此即彼。如果您不想將所有 Repository 暴露給 Web 客戶端,沒問題!有幾種不同的方法可以關閉 Repository 的功能。您可以在原始碼中嵌入註解,或者如果您無法訪問或只是不能新增 Spring Data REST 註解,可以使用流暢的 DSL 風格配置來告訴 Spring Data REST 如何暴露您的資源。在您的應用中使用 Spring Data REST 並非意味著您只能採用一種方式。Spring Data REST 的結構設計使其可以與您現有應用良好配合,因此您可以整合您想要的 Spring Data REST 功能,同時仍然保留您習慣在 Spring MVC 控制器中建立的所有自定義編碼服務。
JSONP 支援將移至過濾器
Spring Data REST 1.0 內建的 JSONP 支援已從核心框架中移除,取而代之的是即將推出的通用 JSONP Servlet 過濾器,該過濾器將比 1.0 版本中 JSONP 的實現方式工作得更好。當該過濾器正式可用時,JSONP 支援不僅可以新增到 Spring Data REST 中,還可以新增到幾乎任何基於 Servlet 的 REST 資源中。
安裝和文件
要開始嘗試 Spring Data REST,請檢視 參考文件,瞭解概況,然後透過簡單地將 spring-data-rest-webmvc
artifact(當前版本為 1.1.0.M1,位於 SpringSource 里程碑倉庫中)的依賴項新增到您的應用中,然後匯入 Spring Data REST 配置,就像您在 spring-restbucks 應用中看到的那樣,即可開始使用。
在 CONFESS_2013 瞭解更多
如果您計劃參加四月第一週在維也納舉行的 CONFESS_2013,那麼您可以在我關於將實體直接匯出到 Web 的演講中瞭解所有關於 Spring Data REST 的資訊。
連結
Spring Data REST 主頁 | GitHub 上的原始碼 | 參考文件