REST放置创建或更新

REST放置创建或更新,rest,http,put,Rest,Http,Put,我想通过以下请求一次性创建或更新项目: PUT /items/{id} 如果项目已经创建,并且更新后没有内容,我是否应该返回201 Created?或者我应该为两个操作返回相同的状态吗?TL;博士 如果区别对客户不重要,则在这两种情况下都使用200 OK 如果区分很重要,则在创建时使用201 Created,在更新时使用200 OK 细节 有了RESTful设计,就没有单一的、正确的做事方式,但我经常发现它提供了很好的指导 如果您不希望客户机根据响应采取单独的操作,那么返回200 OK总是可以

我想通过以下请求一次性创建或更新项目:

PUT /items/{id}
如果项目已经创建,并且更新后没有内容,我是否应该返回
201 Created
?或者我应该为两个操作返回相同的状态吗?

TL;博士 如果区别对客户不重要,则在这两种情况下都使用
200 OK

如果区分很重要,则在创建时使用
201 Created
,在更新时使用
200 OK

细节 有了RESTful设计,就没有单一的、正确的做事方式,但我经常发现它提供了很好的指导

如果您不希望客户机根据响应采取单独的操作,那么返回
200 OK
总是可以的,但是如果您认为客户机需要,您可以提供更多信息。请注意,客户可能会对您的API抱有期望,因此一旦您开始提供更多细节,您就无法轻易改变主意

也就是说,如果要返回创建的
201
,则根据规范:

响应应包括一个实体,其中包含资源特征和位置列表,用户或用户代理可从中选择最合适的一个

例如,您可以将位置放在
location
标题中,但也可以将其放在响应的主体中(但必须记录该主体的结构和内容类型)


当涉及到
204时,没有内容
响应,因此,如果您正在创建一个响应,那么您应该避免这种响应类型,作为对客户的礼貌。

答案在第9.6节中明确说明:


如果创建了新资源,则源服务器必须通过201(已创建)响应通知用户代理。如果修改了现有资源,则应发送200(确定)或204(无内容)响应代码,以表明请求已成功完成。

根据,您应在更新后返回
200 OK
和新资源。谢谢,在这个答案中,irisius说:
201
(如果创建)和
200
(如果更新)。两种不同的反应取决于动作。