sln*_*wak 4 rest domain-driven-design hateoas cqrs
假设你有一个模型Foo.一个业务案例是简单地创建一个Foo实例,因此我的模型中有一个相应的CreateFooCommand,通过调用给定REST端点的POST请求来触发.
当然还有其他命令.
但现在,有一个ViewModel,它来自我的DomainModel.它只是一个带有原始数据的sql表 - 来自DomainModel的每个Foo实例都有相应的派生ViewModel实例.两者都有不同的ID(在DomainModel上有一个DomainID,在ViewModel上它只是一个long值).
现在:在这种情况下我是否应该关心HATEOAS?在适当的REST实现中,我至少应该在标头中返回location-url.但由于我的视图模型仅来自DomainModel,我应该关心吗?在创建DomainModel时,我甚至没有视图模型的ID.
Mar*_*ann 10
由于CQRS意味着查询与命令分离,因此您可能无法立即执行查询,因为命令可能尚未应用(可能永远不会).
为了与HATEOAS协调,而不是从POST请求返回200 OK,服务可以返回202 Accepted:
该请求已被接受处理,但处理尚未完成.该请求最终可能会或可能不会被执行,因为在实际处理时可能不允许该请求.没有用于从诸如此类的异步操作重新发送状态代码的工具.
202回复是故意不承诺的.其目的是允许服务器接受对某些其他进程的请求(可能是每天只运行一次的面向批处理的进程),而不要求用户代理与服务器的连接一直持续到进程完成为止.返回此响应的实体应该包括请求的当前状态的指示,以及指向状态监视器的指针或用户可以期望满足请求的某些估计.
(我的重点)
该指针可以是客户端可以查询以获取Command状态的链接.如果/如果命令完成并且视图已更新,则该状态资源可以包含指向视图的链接.
这几乎是REST实践中的一个工作流程- 非常让人联想到它的Restbucks示例.
处理ID问题的另一个选择是在接受命令之前生成ID - 甚至可能要求客户端提供ID.了解更多关于这种选择这里.
| 归档时间: |
|
| 查看次数: |
1190 次 |
| 最近记录: |