gpt4 book ai didi

node.js - 带有 REST API 的 CQRS

转载 作者:行者123 更新时间:2023-12-05 08:16:55 26 4
gpt4 key购买 nike

我正在使用 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}
    • 动词:补丁
    • 命令:设置项目状态
    • 它的作用:将一个 project-status-changed 事件插入到事件存储中,其中包含新的项目状态(事件、计划、存档等)。
  • api.foo.com/project/{projectId}
    • 动词:删除
    • 命令:删除项目
    • 它的作用:将一个 project-deleted 事件插入到事件存储中

传统上,在 REST 服务中,您会提供一个 PUT 端点,以便可以替换记录。我不确定它在事件溯源 + CQRS 模式中是如何工作的。我会只使用 POST 和 PATCH 动词吗?

我担心我过于细化,每个字段都不需要与之关联的命令。 PUT 端点可用于替换片段。不过,我担心的是事件存储会不同步,所以我只是坚持使用 PATCH 端点。这种粒度级别是典型的吗?对于带有 6 properties on it 的模型我有 5 commands调整模型的属性。

最佳答案

这是我们在帮助开发人员开始使用 CQRS/ES 时经常遇到的一个常见问题。我们需要承认,以纯粹的方式应用 REST 与 DDD/CQRS 非常不匹配,因为命令的意图没有在动词 GET/POST/PUT/PATCH/DELETE 中明确表达(即使您可以 像你一样使用 content-type)。此外,系统的 C/R 端肯定是 CQRS 系统中的不同资源,与 REST 不匹配。

但是,使用HTTP为CQRS/ES系统提供API是非常实用的。

我们通常只使用 POST 发送命令,发送到 /commands 端点或带有命令名称的端点,即 /commands/create -项目。这完全取决于您想变得多么严格。在这种情况下,我们将命令类型嵌入到有效负载中或作为内容类型。

但是,这完全取决于什么与技术堆栈更匹配,而您在此处选择的内容通常不会成就或破坏解决方案。更重要的部分通常是创建良好的领域模型并让整个团队都采用这种思维方式。

祝你好运!

关于node.js - 带有 REST API 的 CQRS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62822639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com