想象一下,我们有一个实体School
,这个实体与Student
实体有一对多的关系。换句话说,有一组Student
附加到给定的School
如果我们要通过单个API调用替换整个Student
集合,
API_URL/school/:school_id/students
这是最好的Rest方法。我认为PUT
仅用于不在集合上的实体。因此,可用的选项是使用PATCH
或POST
答案 0 :(得分:1)
我认为PUT仅用于不在集合上的实体
否 - PUT用于资源,而不是用于实体或集合。
PUT方法请求创建目标资源的状态,或者用请求消息有效负载中包含的表示定义的状态替换目标资源的状态。
域中实体发生的更改是REST资源操作的副作用。请参阅Jim Webber的演讲REST: DDD in the Large。
如果您的邮件正文是资源的替换表示,则POST或PUT是使用的适当方法
如果您的邮件正文为patch document,则应使用POST或PATCH。
如果您担心POST会过载,请在您的设计中创建一个新资源来管理集成协议的这一部分。
再次注意吉姆韦伯:
URI不会映射到域对象 - 这违反了封装。工作(例如:向域模型发出命令)是管理资源的副作用。换句话说,资源是反腐败层的一部分。您应该在集成域中拥有许多资源,而不是在业务域中使用业务对象。