【发布时间】:2020-07-09 19:50:50
【问题描述】:
我正在使用 EventSourcing 在 CQRS 上构建一个 REST 服务,以跨服务分发对我的域的更改。我启动并运行了 REST 服务,使用 POST 端点创建初始模型,然后使用一系列 PATCH 端点来更改模型。每个端点都有一个与之关联的命令,客户端将其作为Content-Type 参数发送。例如,Content-Type=application/json;domain-command=create-project。我有以下用于在我的任务/项目管理服务上创建项目记录的端点。
-
api.foo.com/project
- 动词: POST
- 命令: 创建项目
- 作用:在事件存储中插入一个新模型并设置一些默认值
-
api.foo.com/project/{projectId}
- 动词:补丁
- 命令:重命名项目
-
作用:将
project-renamed事件插入到具有新项目名称的事件存储中。
-
api.foo.com/project/{projectId}
- 动词:补丁
- 命令:重新安排项目
-
它的作用:将
project-rescheduled事件插入到带有新项目截止日期的事件存储中。
-
api.foo.com/project/{projectId}
- 动词:补丁
- 命令: set-project-status
-
作用:将
project-status-changed事件插入到具有新项目状态(活动、计划、存档等)的事件存储中。
-
api.foo.com/project/{projectId}
- 动词:删除
- 命令: 删除项目
-
作用:将
project-deleted事件插入到事件存储中
传统上,在 REST 服务中,您会提供一个 PUT 端点,以便可以替换记录。我不确定这在事件溯源 + CQRS 模式中是如何工作的。我会只使用 POST 和 PATCH 动词吗?
我担心我是细化的,并且每个字段都不需要与之关联的命令。 PUT 端点可用于替换片段。不过我担心的是事件存储会不同步,所以我只是坚持使用 PATCH 端点。这种粒度级别是典型的吗?对于带有6 properties on it 的模型,我有5 commands 来调整模型的属性。
【问题讨论】:
标签: node.js rest cqrs event-sourcing