RESTful Web 应用程序中的客户端服务器体系结构
Client server architecture in RESTful web applications
我想澄清一下客户端服务器架构应该如何适用于具有 RESTful 后端的现代 Web 应用程序。
在 Web 应用程序中,客户端是浏览器,服务器是 Web 服务器。以编程方式,我们有客户端代码(视图),服务器端代码(控制器/模型)和数据库。我的理解正确吗?
所以现在当客户端代码向 RESTful 服务器端代码发送请求时,服务器应该返回一个 JSON/XML 对象,而不仅仅是简单的输出,对吗?
如果不允许客户端代码使用任何服务器端代码重新加载网页,那么它将如何将 JSON/XML 对象解析回网页?使用加载到浏览器中的 JavaScript 库?像阿贾克斯这样的东西?如果我们想重新加载整个网页怎么办?我们使用javascript来做到这一点吗?
编辑:
如果在这种情况下,Web 服务器与后端应用程序服务器是分开的,该怎么办?客户端代码应该调用 Web 服务器路由到后端还是在后端服务器想要调用 RESTful 服务时直接调用后端服务器?
正如罗伯特所说,是的! 你在技术上是正确的。通常在 RESTFul 级别,我们有各种用于 JSON 解析的提供程序,这些提供程序在 RESTFul 注释的帮助下从服务器流向客户端。并重新加载各种JS库,这些库作为JSON作为模型。
我一直在使用的流行组合是Backbone和RESTFul。它非常简单且随时可用的组合。
请参考骨干+休息基本了解
是的,你是对的。 主题有各种各样的变化,但这是"单页 Web 应用程序"的一般概念。 Web服务器提供了一个"纯"的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)作为流行的例子。
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 的数据完全重绘页面。
简单地使用Web浏览器转到另一个链接会容易得多。您的浏览器已经是 REST/HTTP 客户端。确保你有正当的理由在 REST 客户端中用 JavaScript 实现另一个 REST 客户端。
tl;dr 版本 - REST 不关心您使用的内容类型,并且 REST 中不需要使用 JSON 或具有单页应用程序。如果你有一个多页网站,而你所做的只是在JSON中提取数据,并使用该数据来重绘网页的HTML,那么只使用HTML和浏览器的功能要好得多。如果需要支持 Web 浏览器以外的客户端,则可以生成资源的 JSON 版本以及资源的 HTML 版本,并将其留给客户端来决定所需的版本。
- 客户端服务器REST API captcha实现
- 如何防止在客户端/服务器两侧对文本框进行sql注入
- 最小化在javascript中客户端/服务器之间发送的数据
- 客户端服务器常量通信PHP
- 调试器在Meteor.call(可能是客户端/服务器调试)之后停止
- 是否有一种方法可以限制要上传到客户端服务器的文件大小
- 我可以只使用JavaScript制作客户端/服务器任务管理器吗
- 使用jQuery和MVC进行客户端-服务器搜索
- C/SSL/JQuery.ajax() 客户端 - >服务器连接重置,但发送了 1 个字节
- 用于客户端-服务器通信和安全的 API 密钥
- RESTful Web 应用程序中的客户端服务器体系结构
- 使用 node.js 进行客户端服务器通信
- 节点.js游戏开发,客户端-服务器数据交换逻辑
- 合并客户端/服务器端模板引擎
- 了解如何在javascript/HTML5/NodeJS中实现客户端-服务器-客户端基础结构
- 在客户端/服务器端检索原始电影大小
- 如何扩展 EJSON 以序列化 Meteor 客户端-服务器交互的 RegEx
- Javascript 服务器端事件与 C 客户端服务器程序
- 快速客户端服务器
- 在 NodeJS 中进行客户端-服务器通信的简单方法