领先一步
VMware 提供培训和认证,以加快您的进度。
了解更多Spring Data 团队很高兴地宣布,使用 RESTful 语义将领域对象导出到 Web 的发展迈出了新的重要一步:Spring Data REST 1.1.0.M1 现已在 SpringSource 里程碑存储库中提供。
Spring Data REST 首页 | GitHub 源码 | 参考文档
Spring Data REST 是一组 Spring MVC 组件,您可以将其添加到您自己的 Spring MVC 应用程序中,以使用 RESTful、HATEOAS 语义将您的 Spring Data 存储库导出到 Web。它通过将存储库导出到可通过多种方式配置的 RESTful URL 来提供一致的交互 API。
Spring Data REST 通过编写一行代码定义扩展 Spring Data 的CrudRepository
接口的接口,从而支持对顶级实体(那些直接由 Spring Data 存储库管理的领域对象)的 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 的用户代理不需要任何关于后端实体由哪个数据存储管理的特殊知识,最重要的是,您无需编写任何代码即可获得该功能!
Spring Data REST 1.1 现在支持导出 MongoDB CrudRepository
实现。与 JPA 实体相同的 HTTP 语义也适用于 MongoDB @Document
实体。当然支持 GET、POST、PUT、DELETE,也支持@DBRef
。您可以使用 GET、POST、PUT 和 DELETE 查看和管理两个文档之间的关系,并且您可以根据您的@Query
定义导出查找方法。请参考spring-data-mongodb 参考文档,了解对象映射与 JPA 样式映射的不同之处以及查询定义的工作方式。
Spring Data REST 1.1 现在支持导出使用高性能Gemfire 数据库到不同区域的实体。阅读Spring Data Gemfire 文档,了解大量的配置选项以及 Gemfire 中的 POJO 映射与其他映射技术的不同之处。
Spring Data REST 1.1 现在将通过下一个版本的 spring-data-neo4j(2.3 版)支持 Neo4J GraphRepository
。当该版本普遍可用时(应该在 Spring Data REST 1.1 正式版发布前后),您将能够像使用其他数据存储一样,使用标准 HATEOAS 语义访问@NodeEntity
及其关系。
Spring Data REST 的设计方式使得您可以根据需要创建一个完整的 Spring Data REST 应用程序。它毕竟只是一个标准的 Spring MVC web 应用。但是,当您将 Spring Data REST 添加到您自己的服务中时,事情会变得非常有趣。
Spring HATEOAS 作者Oliver Gierke 创建了一个示例应用程序,演示了在现代 Web 应用程序中使用 HATEOAS 原则。它被称为spring-restbucks,是 Jim Webber、Savas Parastatidis 和 Ian Robinson 编写的《REST 实践指南》中描述的 Restbucks 应用程序的实现:REST in Practice。
通过将 Spring Data REST 与其他 RESTful 服务混合,您可以获得 Spring Data REST 导出的领域对象(您无需编写任何代码即可公开这些对象)与不代表实际实体而是代表流程的服务之间的无缝集成。您可以在 spring-restbucks 应用程序中看到支付服务如何与领域对象 CRUD 交互的示例,其中信用卡支付处理由自定义控制器处理,而对象 CRUD 由 Spring Data REST 处理。您的自定义控制器实际上可以 piggyback 到 Spring Data REST URL 上,以便无论 URL 指向的是自定义控制器、Spring Data REST JPA 存储库还是任何其他受支持的存储库样式,都可以维护一致且简单的 URL 结构。
Spring Data REST 不是非此即彼的关系。如果您不想将所有存储库都公开给 Web 客户端,没问题!您可以通过多种不同的方式关闭存储库的功能。您可以将注释嵌入到源代码中,或者如果您无权访问或根本无法添加 Spring Data REST 注释,您可以使用流畅的 DSL 样式配置来告诉 Spring Data REST 如何公开您的资源。在您的应用程序中使用 Spring Data REST 并非是对只有一种做事方法的排他性承诺。Spring Data REST 的结构方式使其能够与您现有的应用程序很好地配合使用,因此您可以合并您想要使用的 Spring Data REST 的那些功能,同时仍然保留您习惯在 Spring MVC 控制器中创建的所有自定义代码服务。
内置于 Spring Data REST 1.0 中的 JSONP 支持已从核心框架中移除,因为它更倾向于即将推出的通用 JSONP Servlet 过滤器,该过滤器的工作方式比 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 应用程序中看到的那样。
如果您计划参加 4 月第一周在维也纳举行的 CONFESS_2013,那么您可以在我关于将实体导出到 Web 的演讲中了解所有关于 Spring Data REST 的信息。