我正在开发一个通过 Web 服务与(Java)后端通信的富互联网 Web 应用程序。我在 Flex/Flash 和 GWT/Javascript 中都对用户界面进行了原型设计,并注意到这些 RIA 平台倾向于支持 RPC 样式的后端通信方法(AMF 用于 Flex,GWT-RPC 用于 GWT)。
就我而言,服务器还需要为我未编写的其他客户端提供 Web 服务。因此,我倾向于基于标准的 Web 服务(例如 SOAP 和 REST)。我相信 RIA 必须使用我们为其他人提供的相同网络服务。我“得到”了 SOAP,因为它模拟了我从经验中熟悉的 RPC 样式。我是 REST 新手,但使用 CXF/Jackson 对 REST 后端进行了原型设计。然而,此时我的 REST API 仍然感觉像是一个 RPC 样式的 API,我意识到这是因为我无法理解 HATEOAS 的想法。
我已经阅读了大约 10 次Roy T. Fieldings 有用的博客文章,我想我开始看到曙光了。例如,我很清楚,如果我要在我的资源中包含指向各种状态转换的链接,我真的可以减少我的客户端和服务器之间的耦合量。我的客户可以只渲染按钮,让用户可以访问当时可以在显示的实体上执行的合法操作。
但是 RIA 与其服务器应用程序之间的松散耦合是否重要?
就其本质而言,RIA 与服务器数据模型非常紧密地耦合在一起。开箱即用,它们预设了很多东西。我猜这就是为什么他们也更喜欢 RPC 风格的应用程序协议……因为松散耦合不是设计目标。但我开始意识到,如果我们认真对待 HATEOAS,我们可以编写一个更通用的 RIA 客户端,对可以执行的数据模型和操作做出很少的假设。这可以减少通过更改后端来维护客户端的工作量,但这有意义吗?收益是否大于成本?
ps - 还有两个细节——这个应用程序有一个极其复杂的、深度嵌套的数据模型。此外,如果有人告诉我我们不是 100% 纯 REST Web 应用程序,我也不会在意。