- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
第 10 章 REST Repository 导出器
使用 Spring Data Repository 抽象(详见第 2 章)的时候,管理实体的 Repository 接口成为访问实体的核心。使用 Spring Data REST Repository 导出器(exporter)项目,现在可以通过 REST Web 服务导出(顾名思义)这些被管理的实体,从而很容易地与数据进行交互。导出器机制会暴露每个 Repository 的导出资源、匹配该资源的 CRUD 操作到 HTTP 方法并且提供了一种方式来执行 Repository 接口所暴露的查询方法。
REST 是什么?
表述性状态转移(Representational State Transfer,REST)是一种架构风格,最早由 Roy Fielding 在他的论文《架构风格与基于网络的软件架构设计》[Fielding00]中进行了描述。它对 HTTP 协议背后的理念进行了概括,它基于此衍生出了以下几个核心理念。
资源 (Resource)
系统暴露资源给其他的系统:订单、客户等。
标识符 (Identifier)
这些资源可以通过标识符进行寻址。在 HTTP 的领域中,这些标识符就是 URL。
动词 (Verb)
每个资源可以通过一组定义好的动词进行访问和操作。这些动词具有专用的语义并且必须要据此进行使用。在 HTTP 中,通用的动词是 GET、PUT、POST、DELETE、HEAD 以及 OPTIONS,还有很少用到的(甚至从不会使用的)TRACE 和 CONNECT。并不是每个资源都需要支持上面列出的所有动词,但是有一点是需要做到的,那就是不能为每个资源设置特殊的动词。
表述 (Representation)
客户端不会直接与资源进行交互,而是通过其表述进行交互。表述要通过媒体类型进行定义,它明确标识了表述的结构。常见的媒体类型有很通用的,如 application/xml 和 application/json,也有更为结构化的,如 application/atom+xml。
超媒体 (Hypermedia)
资源的表述中通常会包含指向其他资源的链接,这样就允许客户端基于资源的状态和所提供的链接对系统进行导航。这种理念被称为用作应用程序状态引擎的超媒体(Hypermedia as the Engine of Application State,HATEOAS)。
事实已经证明,基于这些理念所构建的 Web 服务具有可伸缩性、可靠性以及可进化的能力。这也是为什么在集成软件系统时,REST Web 服务成为了一种普遍采用的方式。尽管 Fielding 的论文非常易读,但我们还是推荐 Jim Webber、SavasParastatidis 和 Ian Robinson 所著的《 REST in Practice 》。关于这个话题,这本书提供了广泛且详细的介绍,这些介绍是以现实世界中的样例作为驱动的[WePaRo10]。
通过示例工程中的 rest 模块,我们将会以导览的方式介绍这些功能。它是兼容于 Servlet 3.0 规范且基于 Spring 的 Web 应用。这个工程最重要的依赖是 spring-data-rest-webmvc 库,它提供了对 Spring MVC 的集成,因此可以将 Spring Data JPA Repository 导出到 Web 中。目前,它只能用于以 JPA 作为后端的 Repository,但是对其他存储形式的支持已经提到路线图之上了。这个工程的基础 Spring 设施与第 4 章非常类似,如果没有看过第 4 章的话,请阅读一下此章以了解基本的知识。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论