REST原则上是一个愚蠢的对象层次结构。它就像资源/对象的文件系统,其中每个对象都可以有子对象。您几乎总能通过REST实现目标。您可以选择使用REST技术构建按惯例复合对象类型,只要提供者和客户端就更高级别的操作达成一致,您就可以避免覆盖。
那么,你如何平衡REST和Demeter?在我看来,它们并没有发生冲突,因为REST完全是关于超松散耦合的,因为提供商试图预测客户端的所有需求是没有意义的,而Demeter认为逻辑可以迁移到它的通过重构最自然的地方。
然而,你可以说,在你更好地了解你的客户之前,REST只是一个止损。 REST只是一个黑客? Demeter在任何服务器/客户端场景中都不现实吗?
答案 0 :(得分:5)
我想你在这里回答了你自己的问题。在这方面,REST
如何与SOAP
或XML-RPC
不同?
REST
的要点不是提供超松耦合,而是以下内容:
GET
请求是幂等的,PUT
更新记录,POST
创建,DELETE
删除有些情况REST
不是最佳答案,但REST
的效果非常好。
答案 1 :(得分:2)
我毫不介意地支付这项法律/建议。它击败了聚合和组合的一半好处,我不会拥有它。
答案 2 :(得分:2)
由RESTful接口公开的表示提供的链接可以完全不透明,而不会违反REST的任何约束。因此我建议REST完全符合得墨忒耳定律。不要求链接在其URL中公开URL空间的结构。
e.g。在面向对象的场景中,您可以使用a.bc
替换调用a.b.c.在RESTful表示中,您可以创建以下内容:
<a>
<link href="bc"/>
</a>
而不是
GET a
<a>
<link href="b"/>
</a>
GET b
<b>
<link href="c"/>
</b>
GET c
我不得不反对altCognito,并说REST的主要目标之一是松散耦合。统一的界面,标准的媒体类型和HATEOAS都结合在一起,形成了一个极其松散耦合的界面。
回应大卫的评论:
REST完全是关于超松散耦合,以至于提供商试图预测客户的所有需求毫无意义
实际上,REST是通过在表示中仅提供有效链接来限制客户端选项。在这些限制内,客户可以尝试满足自己的需求。通过从客户端移除知识,可以确定何时可以实现松散耦合。通过列出一组资源并说“好,你可以GET,PUT,POST,DELETE所有你想要的东西”来实现松耦合。
答案 3 :(得分:1)
我认为他们真的是正交的。 REST描述了URI使用一组规范方法寻址的资源集合:GET,POST等。如果REST例程返回一个URI,那就不是“通过”它识别具有相同方法名称的不同对象。