2015-11-07 106 views
1

我要创建或一次过与下面的请求更新项目:REST PUT创建或更新

PUT /items/{id} 

我应该返回201 Created如果该项目已被创建并204 No Content时,它已被更新?还是应该为这两种行为返回相同的状态?

+0

根据http://stackoverflow.com/a/28642061/1848654你应该在更新后返回'200 OK'和新资源。 – melpomene

+0

谢谢,在这个答案irisius说:'201'如果创建和'200'与更新的资源,如果更新。所以根据行动有两个不同的回应。 – otonakav

回答

2

TL; DR

使用200 OK在这两种情况下,如果区别不是客户端重要的。

创建时使用201 Created,更新时使用200 OK如果区别很重要。

详细

REST风格的设计,有做事的没有一个单一的,正确的方法,但我常常发现,original HTTP status code specification提供了很好的指导。

它总是精细返回200 OK,如果你不希望客户采取基于响应单独行动,但你可以提供详细信息,如果您认为客户会需要它。请注意,客户可能会到期望您的API,所以一旦你开始提供更多的细节,你不能轻易改变主意。

这就是说,如果你想返回201 Created,然后根据规范:

的响应应该包括含有的资源特性和位置(S)的列表的实体从用户或用户代理可以选择最合适的一个。

作为一个例子,可以把位置在Location头,但也可以把它在响应的主体(但你必须记录该机构的结构和内容类型)。

当谈到204 No Content响应they create dead ends for link-following clients,所以如果你正在创建一个true level 3 REST API那么你应该避免这种响应类型作为客户的礼貌。

3

答案在RFC2616明确提出,9.6节:

如果创建了一个新的资源,原始服务器必须通过201(创建)响应通知用户代理。如果现有资源被修改,则应发送200(OK)或204(无内容)响应代码以指示成功完成请求。