6

基于 GUI 的 Web 应用程序可以构建在 GUI 组件、有状态框架(如 Wicket)上,或者它们可以以 RESTful、无状态方式构建,仅在客户端具有 GUI 状态。

从技术角度来看,REST 看起来是正确的方式,因为它利用了 http 的全部功能并导致了高度可扩展的应用程序。但这是有代价的。在许多情况下,复杂的 GUI 需要客户端上的 JavaScript 应用程序。如果应在客户端上维护状态,您必须留在同一页面上并仅重新加载部分。或者你必须使用隐藏 iframe 的技巧。有时服务器上有购物车之类的伪资源,以启用 RESTful 设计。你必须保持多步对话的中间状态等等......

如果我环顾四周,很少有 RESTful GUI Web 应用程序。这是因为历史原因还是 RESTful 设计在常见场景中没有生产力?

4

3 回答 3

9

如果我环顾四周,很少有 RESTful GUI Web 应用程序。这是因为历史原因还是 RESTful 设计在常见场景中没有生产力?

我的回答是主观的,但在我看来,有两个主要障碍阻碍了 RESTful 的发展:

  1. 改变 - 它与传统的网站设计方式非常不同
  2. 挑战 - 设计一个纯 RESTful 服务器 API 和相应的丰富、健壮的客户端 UI 并不容易

在许多情况下,复杂的 GUI 需要客户端上的 JavaScript 应用程序。

在我看来,无论服务器端实现如何,复杂、丰富的客户端体验都需要一些深入的 JavaScript。

您必须保持在同一页面上并仅重新加载部分,

这是与传统的请求/响应整页到整页设计非常不同的设计。每种设计都有自己的权衡取舍。REST 设计特别适用于 AJAX 调用,但客户端代码需要仔细设计才能维护和健壮。

带有胖客户端的 RESTful 服务器:

  • 扩展性好:每个用户的会话信息不会存储在稀缺的服务器内存中
  • 通过线路减少请求/响应数据:不完整发送每个页面,不发送会话 ID 或ViewStates
  • 干净的可重用 URL:提供一个干净、解耦的服务器 API,可以支持多个 UI
  • pure:严格遵守 HTTP 规范(GET 不会产生副作用等)
  • 客户端体验:异步事务更丰富、响应更快

但是,正如您提到的,胖客户端有缺点:

  • 更容易受到 XSS 攻击,RESTful URL 确实需要小心的安全性
  • 复杂的 JavaScript 可能难以开发、维护和调试(使用 OO JavaScript 可以帮助解决这个问题)
  • 需要向用户表明异步请求正在后台处理
  • 需要更多的客户端故障处理逻辑
  • 与服务器端相比,框架和 IDE 工具在客户端开发方面一直较弱(这正在慢慢变得更好)
于 2010-02-03T23:53:01.667 回答
1

RESTful GUI 设计非常高效,恕我直言。您可以利用许多功能而无需额外工作来支持极端情况,例如用户重新提交信息、浏览器历史记录(后退和前进)多个选项卡和窗口。如果我没记错的话,这个站点使用的是 RESTful UI。

于 2010-02-03T07:24:47.367 回答
0

REST 是通过观察成功的 Web 应用程序(GUI 和 M2M)的特征来定义的。因此,根据定义,它应该适用于这些情况。

我还注意到您问了一个关于桌面与 Web 应用程序的问题。您可能有兴趣知道 REST 也是用于构建桌面客户端应用程序的出色架构。我编写了一些桌面客户端,它们从 REST 服务器获取所有数据。

于 2010-02-03T12:16:45.937 回答