REST PUT创建或更新

时间:2015-11-07 17:01:32

标签: rest http put

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

PUT /items/{id}

如果项目已创建,我应该返回201 Created吗?如果已更新项目,我应该204 No Content吗?或者我应该为两个动作返回相同的状态吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

TL; DR

如果区别对客户不重要,请在200 OK中使用201 Created

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

详细

使用RESTful设计,没有单一,正确的做事方式,但我经常发现original HTTP status code specification提供了良好的指导。

如果您不希望客户端根据响应采取单独的操作,那么返回201 Created总是很好,但如果您认为客户端正在进行,可以提供更多信息需要它。请注意,客户可能会期待您的API,所以一旦您开始提供更多详细信息,您就无法轻易改变主意。

那就是说,如果你想返回Location,那么根据规范:

  

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

例如,您可以将位置放在204 No Content标题中,但您也可以将其放在响应的正文中(但是您必须记录该正文的结构和内容类型)。

对于org.apache.avro.generic.GenericData$Record cannot be cast to my.name.space.MyClass个回复they create dead ends for link-following clients,所以如果您正在创建true level 3 REST API,那么您应该避免将该回复类型视为对客户的礼貌。