2

我想澄清一下客户端服务器架构应该如何用于具有 RESTful 后端的现代 Web 应用程序。

在 Web 应用程序中,客户端是浏览器,服务器是 Web 服务器。以编程方式,我们有客户端代码(视图)、服务器端代码(控制器/模型)和数据库。我的理解正确吗?

所以现在当客户端代码向 RESTful 服务器端代码发送请求时,服务器应该返回一个 JSON/XML 对象而不仅仅是简单的输出,对吗?

如果客户端代码不允许使用任何服务器端代码重新加载网页,那么它将如何将 JSON/XML 对象解析回网页?使用加载到浏览器中的 javascript 库?阿贾克斯之类的?如果我们想重新加载整个网页怎么办?我们是否使用 javascript 来做到这一点?

编辑:

如果这种情况下的 Web 服务器与后端应用程序服务器是分开的呢?客户端代码调用 RESTful 服务时应该调用 Web 服务器路由到后端还是直接调用后端服务器?

4

3 回答 3

1

正如罗伯特所说,是的!你在技术上是正确的。通常在 RESTFul 级别,我们有各种用于 JSON 解析的提供程序,它们在 RESTFul 注释的帮助下从服务器流向客户端。并重新加载以 JSON 为模型的各种 JS 库。

我一直在使用的流行组合是 Backbone 和 RESTFul。它非常简单,随时可以组合。

基本了解请参考主干+rest

于 2013-11-06T05:01:50.537 回答
0

是的,你是对的。主题有各种各样的变化,但这是“单页网络应用程序”的一般概念。网络服务器提供一个“普通”的 html 页面和一堆 javascript。javascript 调用 restful 服务来获取 JSON(比 JS 中的 XML 更容易使用),解析该 JSON,然后相应地更新 HTML DOM。如果 javascript 出于某种原因想要重新加载整个页面(例如在 window.onerror 处理程序中或当用户单击“注销”按钮时),它可以执行 window.location.reload() 或 window.location=urlOfSomeOtherPage。

有各种开源 JS 库可以简化构建此类应用程序。请参阅 Angular、Knockout 和 Backbone(通常使用 Backbone.Marionette)作为流行示例。

于 2013-11-06T04:52:48.733 回答
0

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 版本的资源,并由客户端决定它想要哪个版本。

于 2013-11-06T11:48:00.810 回答