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。它透過將儲存庫匯出到 RESTful URL 來提供一致的交互 API,這些 URL 可以通過幾種不同的方式配置。
Spring Data REST 透過實際編寫定義擴展 Spring Data 的 CrudRepository
介面的單行程式碼來支援頂層實體(那些由 Spring Data Repository 直接管理的網域物件)的 CRUD。完成後,您的實體將具有完整的 RESTful 語義。您可以創建新的實體、更新現有實體以及使用標準 URL 刪除它們,這些 URL 遵循 HATEOAS 的原則,是可以發現的。這意味著存取您的 Spring Data REST 應用程式的使用者代理不需要提前了解您正在匯出哪些資源。它可以透過連續呼叫 JSON 中提供的 URL 來發現存在哪些實體以及這些實體上存在哪些關係。這些「連結」是 HATEOAS REST 應用程式的真正基礎和力量。
從頭開始變更
版本 1.1 實際上是從頭開始重寫的。它不僅比 1.0 更容易配置,並且更好地符合 Spring MVC 對於轉換到 Spring 3.2 的期望,而且 Spring Data REST 內部最大的變化是它現在支援 JPA 以外的其他類型的 Spring Data 儲存庫實作。無論使用哪種後端資料儲存,CRUD 和管理關係(如果資料儲存支援)的 HTTP 語義都保持不變。
這意味著現在可以在同一個 Spring Data REST 應用程式中匯出 JPA 實體和 MongoDB 實體,並使用通用的 URL 結構和使用所有實體和集合的標準 Spring HATEOAS 資源表示來存取這些實體。存取這些 RESTful URL 的使用者代理不需要任何關於後端實體由哪個資料儲存管理的特殊知識,最重要的是,您不必編寫任何程式碼來獲得該功能!
MongoDB 支援
Spring Data REST 1.1 現在支援匯出 MongoDB CrudRepository
實作。相同的 HTTP 語義適用於 MongoDB @Document
實體,也適用於 JPA 實體。GET、POST、PUT、DELETE 當然支援,@DBRef
也支援。您可以使用 GET、POST、PUT 和 DELETE 來檢視和管理兩個文件之間的關係,並且您可以根據您的 @Query
定義匯出 Finder 方法。請參考 spring-data-mongodb 參考文檔,以獲取有關物件對應與 JPA 樣式對應有何不同以及查詢定義如何工作的完整詳細資訊。
Gemfire 支援
Spring Data REST 1.1 現在支援將使用高效能 Gemfire 資料庫的實體匯出到不同的 Regions。請閱讀 Spring Data Gemfire 文件,以取得關於大量配置選項的完整說明,以及 Gemfire 中的 POJO 映射與其他映射技術有何不同。
接下來是 Neo4J 支援
Spring Data REST 1.1 現在設定為支援 Neo4J GraphRepository
,並將與 spring-data-neo4j 的下一個版本 (版本 2.3) 一起提供。 當該版本普遍可用時(應該在 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,並且是 Restbucks 應用程式的實作,該應用程式描述於 REST 服務的系統神學中:REST in Practice,作者為 Jim Webber、Savas Parastatidis 和 Ian Robinson。
混合 REST 服務
透過將 Spring Data REST 與您的其他 RESTful 服務混合使用,您可以獲得 Spring Data REST 匯出的那些網域物件(您無需編寫任何程式碼即可公開它們)與那些不代表實際實體而是代表流程的服務之間的無縫整合。您可以在 spring-restbucks 應用程式中看到一個範例,了解付款服務如何與網域物件 CRUD 互動,其中信用卡付款處理由自訂控制器處理,而物件 CRUD 由 Spring Data REST 處理。您的自訂控制器實際上可以搭載在 Spring Data REST URL 上,以便在整個應用程式中保持一致且簡單的 URL 結構,無論 URL 是指您的自訂控制器、Spring Data REST JPA Repository 還是任何其他支援的 Repository 樣式。
這不是排他的
這不是 Spring Data REST 的二選一。 如果您不希望所有 Repositories 都暴露給 Web 用戶端,沒問題! 您可以透過幾種不同的方式關閉 Repositories 的功能。 您可以將註解嵌入到您的原始碼中,或者,如果您無權存取或根本無法新增 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 Serlvet Filter,該篩選器將比版本 1.0 中實作 JSONP 的方式更好。 當該篩選器普遍可用時,JSONP 支援不僅可以新增到 Spring Data REST,還可以新增到幾乎任何基於 Servlet 的 REST 資源。
安裝和文件
若要開始使用 Spring Data REST,請查看 參考文件,以便了解其佈局,並透過簡單地將依賴項新增到 spring-data-rest-webmvc
構件(目前在 SpringSource 里程碑儲存庫 中為 1.1.0.M1),然後匯入 Spring Data REST 配置,就像您在 spring-restbucks 應用程式中看到的那樣,開始在您自己的應用程式中使用它。
在 CONFESS_2013 上了解更多
如果您計劃在 4 月的第一周參加維也納的 CONFESS_2013,那麼您可以在 我關於將實體匯出到 Web 的演講 中聽到有關 Spring Data REST 的所有資訊。
連結
Spring Data REST 首頁 | GitHub 上的原始碼 | 參考文件