REST 或 HTTP 中没有任何内容规定应返回给客户端的内容(html、json 等)。这取决于您正在构建的应用程序。
过去 25 年来的网络是“RESTful”的。如果您遵循 HTTP 设计,那么您遵循良好的 REST 设计,因为 HTTP 是一种实现 REST 约束的协议。因此,如果您正在考虑资源并使用 HTTP 动词(GET、POST、PUT 等)来更改服务器上资源的状态,而不是将资源视为在服务器上做某事的动词,那么您就是 RESTful。
最近发生的事情是,人们构建了返回 JSON 而不是 HTML 的 Web 应用程序 API,并将其称为“RESTful”(即使它们不是),因此必须将 JSON 返回为 RESTful 的想法已经进入了普遍意识。但是你可以返回 HTML 并且仍然是 RESTful,因为 REST 不关心服务器返回什么。内容类型只是资源的一种表示。根据Content-Types
您支持的格式,由您和客户决定。REST 在内容类型方面是不可知的。您可以返回资源的 HTML 版本和资源的 JSON 版本,具体取决于客户端说它可以接受的内容(在Accept
请求的标头中)。
如果您只需要 HTML,则只需返回 HTML。如果您有这样做的实际原因,请仅构建“单页应用程序”。Twitter 这样做是因为他们不希望用户必须刷新页面才能看到新的推文,并且他们还希望拥有一个独立于网站的 JSON API,而网站只是充当 API 的客户端。所以 twitter.com 页面只是从 twitter API 中提取数据,然后使用 Javascript 重新绘制页面的一小部分。这只有效(有些人认为它不起作用),因为您 99% 的时间只打开了一个页面。您没有在浏览不同链接的站点中移动。
除此之外,如果您的网站有可以关注和探索的链接,那么使用 JSON 和 JavaScript 重绘就是在重新发明轮子。一些公司忘记了这一点,并把用 JavaScript 重绘带到了一个愚蠢的极端。他们有非常复杂的“单页站点”,实际上是多页站点,但是当您单击链接时,它们会使用来自 AJAX 的数据完全重绘页面。
简单地使用网络浏览器转到另一个链接会容易得多。您的浏览器已经是 REST/HTTP 客户端。确保您有正当理由在 REST 客户端中使用 JavaScript 实现另一个 REST 客户端。
tl;dr 版本- REST 不关心您使用的 Content-Type,并且 REST 不需要使用 JSON 或拥有单页应用程序。如果您有一个多页站点,并且您所做的只是以 JSON 格式提取数据并使用该数据重新绘制网页的 HTML,那么使用 HTML 和浏览器的功能要好得多。如果您需要支持 Web 浏览器以外的客户端,您可以生成资源的 JSON 版本以及 HTML 版本的资源,并由客户端决定它想要哪个版本。