返回介绍

16.2 创建第一个 REST 端点

发布于 2024-08-17 00:45:49 字数 1895 浏览 0 评论 0 收藏 0

借助Spring的支持来实现REST功能有一个很有利的地方,那就是我们已经掌握了很多创建RESTful控制器的知识。从第5章到第7章中,我们学到了创建Web应用的知识,它们可以用在通过REST API暴露资源上。首先,我们会在名为SpittleApiController的新控制器中创建第一个REST端点。

如下的程序清单展现了这个新REST控制器起始的样子,它会提供Spittle资源。这是一个很简单的开始,但是在本章中,随着不断学习Spring REST编程模型的细节,我们将会不断构建这个控制器。

程序清单16.1 实现RESTful功能的Spring MVC控制器

让我们仔细看一下程序清单16.1。你能够看出来它服务于一个REST资源而不是Web页面吗?

可能看不出来!按照这个控制器的写法,并没有地方表明它是RESTful、服务于资源的控制器。实际上,你也许能够认出这个spittles()方法,我们曾经在第5章(5.3.1小节)见过它。

我们回忆一下,当发起对“/spittles”的GET请求时,将会调用spittles()方法。它会查找并返回Spittle列表,而这个列表会通过注入的SpittleRepository获取到。列表会放到模型中,用于视图的渲染。对于基于浏览器的Web应用,这可能意味着模型数据会渲染到HTML页面中。

但是,我们现在讨论的是创建REST API。在这种情况下,HTML并不是合适的数据表述形式。

表述是REST中很重要的一个方面。它是关于客户端和服务器端针对某一资源是如何通信的。任何给定的资源都几乎可以用任意的形式来进行表述。如果资源的使用者愿意使用JSON,那么资源就可以用JSON格式来表述。如果使用者喜欢尖括号,那相同的资源可以用XML来进行表述。同时,如果用户在浏览器中查看资源的话,可能更愿意以HTML的方式来展现(或者PDF、Excel及其他便于人类阅读的格式)。资源没有变化——只是它的表述方式变化了。

注意:

尽管Spring支持多种资源表述形式,但是在定义REST API的时候,不一定要全部使用它们。对于大多数客户端来说,用JSON和XML来进行表述就足够了。

当然,如果内容要由人类用户来使用的话,那么我们可能需要支持HTML格式的资源。根据资源的特点和应用的需求,我们还可能选择使用PDF文档或Excel表格来展现资源。

对于非人类用户的使用者,比如其他的应用或调用REST端点的代码,资源表述的首选应该是XML和JSON。借助Spring同时支持这两种方案非常简单,所以没有必要做一个非此即彼的选择。

按照我的意见,我推荐至少要支持JSON。JSON使用起来至少会像XML一样简单(很多人会说JSON会更加简单),并且如果客户端是JavaScript(最近一段时间以来,这种做法越来越常见)的话,JSON更是会成为优胜者,因为在JavaScript中使用JSON数据根本就不需要编排和解排(marshaling/demarshaling)。

需要了解的是控制器本身通常并不关心资源如何表述。控制器以Java对象的方式来处理资源。控制器完成了它的工作之后,资源才会被转化成最适合客户端的形式。

Spring提供了两种方法将资源的Java表述形式转换为发送给客户端的表述形式:

内容协商(Content negotiation):选择一个视图,它能够将模型渲染为呈现给客户端的表述形式;

消息转换器(Message conversion):通过一个消息转换器将控制器所返回的对象转换为呈现给客户端的表述形式。

鉴于我们在第5章和第6章中已经讨论过视图解析器,并且已经熟悉了基于视图的渲染(在第6章中),所以首先看一下如何使用内容协商来选择视图或视图解析器,它们将资源渲染为客户端能够接受的形式。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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