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 儲存庫匯出到 Web。 它透過將儲存庫匯出到可在幾個不同方式中配置的 RESTful URL,提供一致的互動 API。
Spring Data REST 支援頂層實體 (由 Spring Data 儲存庫直接管理的那些網域物件) 的 CRUD,方法是實際編寫定義延伸 Spring Data 的 CrudRepository
介面的單行程式碼。 完成後,您的實體將具有完整的 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 Resource 表示法來存取這些實體。存取這些 RESTful URL 的使用者代理程式不需要任何關於後端實體是由哪個資料儲存區管理的特殊知識,最重要的是,您不需要編寫任何程式碼即可獲得該功能!
MongoDB 支援
Spring Data REST 1.1 現在支援匯出 MongoDB CrudRepository
實作。與 JPA 實體一樣,相同的 HTTP 語意也適用於 MongoDB @Document
實體。當然支援 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 現在已設定為在下一個版本的 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,是 Restbucks 應用程式的一個實作,該應用程式描述於 Systematic Theology of REST services: REST in Practice,作者是 Jim Webber、Savas Parastatidis 和 Ian Robinson。
混合 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 註解,則可以使用 fluent、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 了解更多資訊
如果您計劃在四月的第一周參加維也納的 CONFESS_2013,那麼您可以在我關於將實體匯出到 Web 的演講中聽到關於 Spring Data REST 的所有資訊。
連結
Spring Data REST 首頁 | GitHub 上的原始碼 | 參考文件