我要创建或一次过与下面的请求更新项目:REST PUT创建或更新
PUT /items/{id}
我应该返回201 Created
如果该项目已被创建并204 No Content
时,它已被更新?还是应该为这两种行为返回相同的状态?
我要创建或一次过与下面的请求更新项目:REST PUT创建或更新
PUT /items/{id}
我应该返回201 Created
如果该项目已被创建并204 No Content
时,它已被更新?还是应该为这两种行为返回相同的状态?
使用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那么你应该避免这种响应类型作为客户的礼貌。
答案在RFC2616明确提出,9.6节:
如果创建了一个新的资源,原始服务器必须通过201(创建)响应通知用户代理。如果现有资源被修改,则应发送200(OK)或204(无内容)响应代码以指示成功完成请求。
根据http://stackoverflow.com/a/28642061/1848654你应该在更新后返回'200 OK'和新资源。 – melpomene
谢谢,在这个答案irisius说:'201'如果创建和'200'与更新的资源,如果更新。所以根据行动有两个不同的回应。 – otonakav