restful设计是否违反命令-查询原则?

本文关键字:查询 原则 命令 是否 restful | 更新日期: 2023-09-27 18:11:39

RESTful设计是否违反了命令和查询分离原则?

在我们的设计中,我们有将请求路由到服务类的控制器。

服务类中的方法,无论是GET/POST/PUT,总是有一个返回值:

public Dog PutDogToSleep(/*params*/)
{
   dogService.Sleep(..);
   return dog;
}

我现在找不到它,但我读到一个HTTP RESTful请求(get/post/put)应该返回你正在运行请求的对象。例如,如果您正在执行PUT操作,那么您将执行该PUT操作,然后返回对象的当前状态。

既然我们的方法正在做一些事情(.Sleep)并返回数据,它们是否违反了命令和查询seg原则?

REST实现不符合命令/查询吗?

如果你在HTTP上做REST,那么RFC7231描述准确GET、PUT、POST和DELETE的行为是什么?

restful设计是否违反命令-查询原则?

与您执行某些操作并返回数据的命令相关,嗯,严格来说违反了CQS;因为命令通常不返回任何东西,因此甚至可以异步执行。但是,我喜欢更实用的方法:如果需要,命令可以返回ID。

这个ID可以返回给你的REST API的消费者;这基本上是消费者需要识别创建或修改的实体;说明书上说:

"如果资源已经在源服务器上创建,响应应该是201(已创建),并包含一个描述请求状态和引用新资源的实体,以及位置标头(参见章节14.30)。"

同样,您可以使用投影来:

  • 基于您的数据实体为您的查询端构建仅视图的DTO
  • 为您的命令端构建命令DTO

…并将其与REST服务一起公开,这样您就可以真正控制自己所公开的内容。