返回介绍

第 10 章 REST Repository 导出器

发布于 2025-04-22 19:57:20 字数 1759 浏览 0 评论 0 收藏

使用 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 章的话,请阅读一下此章以了解基本的知识。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。