Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RESTful web应用程序中的客户机-服务器体系结构_Javascript_Ajax_Json_Rest - Fatal编程技术网

Javascript RESTful web应用程序中的客户机-服务器体系结构

Javascript RESTful web应用程序中的客户机-服务器体系结构,javascript,ajax,json,rest,Javascript,Ajax,Json,Rest,我想澄清一下客户机-服务器体系结构如何适用于具有RESTful后端的现代web应用程序 在web应用程序中,客户端是浏览器,服务器是web服务器。在编程方面,我们有客户端代码(视图)、服务器端代码(控制器/模型)和数据库。我的理解正确吗 所以现在当客户端代码向RESTful服务器端代码发送请求时,服务器应该返回JSON/XML对象,而不仅仅是简单的输出,对吗 如果客户端代码不允许使用任何服务器端代码重新加载网页,那么它将如何将JSON/XML对象解析回网页?使用加载到浏览器中的javascrip

我想澄清一下客户机-服务器体系结构如何适用于具有RESTful后端的现代web应用程序

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

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

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

编辑:


在这种情况下,如果web服务器与后端应用程序服务器分开,该怎么办?客户端代码应该调用web服务器路由到后端,还是在需要调用RESTful服务时直接调用后端服务器?是的,您是正确的。主题有各种各样的变化,但这是“单页web应用”的一般概念。Web服务器提供一个“普通”html页面和一组javascript。javascript调用restful服务来获取JSON(比JS中的XML容易得多),解析JSON,然后相应地更新HTMLDOM。如果javascript出于某种原因(例如在window.onerror处理程序中或当用户单击“注销”按钮时)希望重新加载整个页面,它可以执行window.location.reload()或window.location=urlOfSomeOtherPage


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

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

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


请参阅了解基本内容

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不关心服务器返回的内容。内容类型只是资源的表示形式。根据您支持的
内容类型
,由您和客户机决定采用何种格式。对于内容类型,REST是不可知的。您可以返回资源的HTML版本和资源的JSON版本,具体取决于客户端表示它可以接受的内容(在请求的
accept
标题中)

如果您只需要HTML,那么只需返回HTML即可。只有当你有真正的理由这样做的时候,才能构建一个“单页应用”。Twitter之所以这样做,是因为他们不希望用户必须刷新页面才能看到新的推文,他们还希望有一个独立于网站的JSON API,而网站只是充当API的客户端。因此twitter.com页面只是从twitterapi中提取数据,并使用该数据使用Javascript重新绘制页面的一小部分。这只起作用(有些人认为它不起作用),因为你99%的时间只打开一页。您没有在网站中浏览不同的链接

除此之外,如果你有一个站点有链接可以跟踪和浏览,那么使用JSON和JavaScript重画就是重新发明轮子。一些公司忘记了这一点,将JavaScript的重画推向了愚蠢的极端。他们有非常复杂的“单页站点”,实际上是多页站点,但当您单击链接时,他们完全使用AJAX中的数据重新绘制页面

简单地使用web浏览器转到另一个链接要容易得多您的浏览器已经是一个REST/HTTP客户端。确保您有充分的理由在REST客户端内用JavaScript实现另一个REST客户端


tl;dr版本-REST不关心您使用的内容类型,REST中不要求使用JSON或使用单页应用程序。如果你有一个多页面的网站,你所做的只是拉下JSON中的数据,并使用这些数据重新绘制网页的HTML,那么只使用HTML和浏览器的功能要好得多。如果您需要支持web浏览器以外的客户端,您可以在HTML版本的资源旁边生成JSON版本的资源,并让客户端决定需要哪个版本。

所以浏览器中的javascript将直接调用后端RESTful服务器,而无需通过web服务器?是的,RESTful服务器服务器是一个web服务器(使用http等),虽然它的实现通常会委托给其他后端系统(如数据库),但直接调用它。web服务器(如Apache或Nginx)和后端服务器(如Python服务器)都是acc,这是非常不寻常的