我们回忆一下,当发起对 “/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 同时支持这两种方案非常简单,所以没有必要做一个非此即彼的选择。