我了解REST和事件溯源的基础知识,但从未在严格的RESTful API或任何事件溯源项目中工作过。
请问是否可以同时使用这两种技术?
在事件溯源中,客户端发送事件,这是否意味着服务器上有一个事件集合,并且API的所有POST请求都将添加到该集合中,以添加事件?
客户端如何发现可以发送给服务器的命令?
我了解REST和事件溯源的基础知识,但从未在严格的RESTful API或任何事件溯源项目中工作过。
请问是否可以同时使用这两种技术?
在事件溯源中,客户端发送事件,这是否意味着服务器上有一个事件集合,并且API的所有POST请求都将添加到该集合中,以添加事件?
客户端如何发现可以发送给服务器的命令?
有人能解释一下这两者是否可以一起使用吗?
可以。浏览器客户端会根据自己的需求进行操作,而http服务器则可以将这些操作记录为事件。
就像事件源(Event Sourcing)一样,客户端发送事件,这意味着在服务器上存在一个单一的事件集合,并且所有API的POST请求都将被添加到该集合中,以添加事件?
不是的。客户端可以是事件的发起者,但它不应该知道构成事件的内容,以防止基于那个事件集合的服务器和客户端之间的紧密耦合。事件源应该被封装并从演员隐藏起来。
客户端如何发现它可以向服务器发送哪些命令?
如果您不需要在与您在先前问题中提到的相同集合上发送事件,则无需这样做。您可以简单地以任何您想要的方式发布REST API,并将事件源从客户端/演员隐藏起来。请查看http://restdesc.org/。
简而言之,是的我们可以。你所列举的所有事情,包括REST、事件溯源(ES)和CQRS都是为了不同的目的而存在的。因此,我认为将它们全部综合起来并没有任何问题。
让我们来看看- REST是一种进行Web服务API的方式,ES是一种在域内进行通信的工具,而CQRS则是一种中级架构。
在ES中,客户端(如果我们谈论的是Web客户端)不会发送域事件。如果你指的是另一个有限上下文,并且该有限上下文是你的域的一部分,那么我想通过另一种方式来解决事件传输,比如一个服务总线之类的东西会很好。如果有限上下文不是你的域的一部分,那么你应该通过ACL和API来进行通信,而不是使用原始的域事件。:)
关于命令的简介。同样地,在CQRS中,命令存在于应用程序边界内。外部客户端(Web客户端、API客户端)不应直接发送应用程序命令。你应该提供一个API(内部客户端),允许执行某些服务用例,但不是单独的命令。你可以尝试回答一个非常流行的SO问题-当我们使用CQRS时如何检查用户名唯一性?:)