5
REST API如何适合基于命令/操作的域?
在本文中,作者声称 有时,需要公开API中固有的非RESTful操作。 然后 如果一个API有太多的动作,则表明它是使用RPC观点设计的,而不是使用RESTful原理设计的,或者所讨论的API自然更适合RPC类型模型。 这也反映了我在其他地方阅读和听到的内容。 但是,我觉得这很令人困惑,我希望对此事有更好的了解。 示例I:通过REST接口关闭VM 我认为,有两种根本不同的方法来对虚拟机关闭建模。每种方式可能会有一些变化,但现在让我们集中讨论最基本的差异。 1.修补资源的状态属性 PATCH /api/virtualmachines/42 Content-Type:application/json { "state": "shutting down" } (或者,PUT在子资源上/api/virtualmachines/42/state。) VM将在后台关闭,并且在稍后的某个时间点(取决于关闭的成功与否)将成功,否则状态可能不会通过“关闭电源”在内部进行更新。 2.在资源的actions属性上进行PUT或POST PUT /api/virtualmachines/42/actions Content-Type:application/json { "type": "shutdown" } 结果与第一个示例完全相同。该状态将立即更新为“关闭”,并可能最终更新为“关闭电源”。 两种设计都是RESTful的吗? 哪个设计更好? 示例II:CQRS 如果我们有一个CQRS域,其中包含许多这样的“操作”(又称命令),它们可能潜在地导致多个聚合的更新,或者无法映射到具体资源和子资源上的CRUD操作? 我们是否应该在可能的情况下尝试建模尽可能多的命令,具体取决于在具体资源上创建或更新的具体资源(遵循示例I的第一种方法),其余部分使用“动作端点”? 还是应该将所有命令映射到动作端点(如示例I的第二种方法)? 我们应该在哪里划界线?设计何时变得不那么RESTful? CQRS模型是否更适合RPC之类的API? 据我了解,根据上面引用的文字。 从我的许多问题中可以看出,我对该主题有些困惑。您能帮我更好地了解它吗?