RESTful Web应用程序中的客户端服务器体系结

时间:2013-11-06 04:44:36

标签: javascript ajax json rest

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

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

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

如果不允许客户端代码使用任何服务器端代码重新加载网页,那么它将如何将JSON / XML对象解析回网页?使用加载到浏览器中的JavaScript库?像Ajax这样的东西?如果我们想重新加载整个网页怎么办?我们使用javascript来做到这一点吗?

修改

如果此情况下的Web服务器与后端应用程序服务器分开怎么办?客户端代码是否应该调用Web服务器以在需要调用RESTful服务时直接进行后端调用或直接调用后端服务器?

3 个答案:

答案 0 :(得分:1)

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

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

请参阅backbone+rest了解基本知识

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

REST或HTTP中没有任何内容指示应该返回给客户端的内容(html,json等)。这取决于您正在构建的应用程序。

过去25年来的网络是“RESTful”。如果您遵循HTTP设计,那么您正在遵循良好的REST设计,因为HTTP是实现REST约束的协议。因此,如果您正在考虑资源并使用HTTP谓词(GET,POST,PUT等)来更改服务器上资源的状态,而不是将资源视为动词来在服务器上执行某些操作,那么您就是RESTful。 / p>

最近发生的事情是人们构建了返回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浏览器以外的客户端,您可以在HTML版本的资源旁边生成资源的JSON版本,并将其留给客户端来决定它想要的版本。