AFAIK Fielding并不认为REST很好,他只是在描述Web的实际架构。
我想,这让它有些不足。REST是,毕竟枚举建筑风格是菲尔丁使用作为总设计师HTTP / 1.1规范。
但是实际上是否有任何理由认为REST是该领域的理想架构?是否有证据表明HATEOAS是机器对机器通信的有益设计原则?
“这取决于”。HATEOAS是REST 统一接口约束的一部分。
通过将通用性的软件工程原理应用于组件接口,简化了整个系统架构,并提高了交互的可见性。实施与提供的服务脱钩,从而鼓励了独立的可扩展性。但是,要权衡的是,统一的接口会降低效率,因为信息是以标准化形式而不是特定于应用程序需求的形式传输的。REST接口被设计为对于大颗粒超媒体数据传输是有效的,针对Web的常见情况进行了优化,但是导致该接口对于其他形式的体系结构交互不是最佳的。
因此,让我们考虑一下这意味着什么。当我在无线路由器上遇到问题时,可以使用与用于向stackexchange提交答案的浏览器相同的浏览器进行通信。特别是,我使用的浏览器是什么,或者我的浏览器是否比路由器期望的更新晚(或更新)都没有关系。编写浏览器的工程组织完全独立于创建路由器接口的组织也没关系。
它只是工作。
当然,这不是普遍的。 菲尔丁在2008年写道:
这并不意味着我认为每个人都应该根据REST架构风格设计自己的系统。REST适用于跨越多个组织的长期基于网络的应用程序。如果您认为不需要约束,请不要使用它们。
选择了构成REST体系结构样式的约束作为它们引入的属性。如果这些属性对您的用例而言并不有价值,那么您绝对应该考虑删除相应的约束。
机器到机器变得困难的地方是,您已经失去了人类模糊匹配表示形式所提供的语义的能力。客户只需要了解媒体类型就可以解决问题,但通常我们需要一个人来寻找语义线索以获取含义。
schema.org是创建机器可读词汇的一项工作;机器代理使用客户端找到语义提示,并运用其自身对含义的理解来选择要采取的正确操作。
但这是工作;您需要投资开发资源的机器友好表示形式,并确保这些表示形式前后兼容,以便可以独立开发客户端。
当单个组织同时控制客户端和服务器时,这种独立性的好处要小得多,在这种情况下,约束可能不是适当的体系结构选择。