我想使用以下请求一次性创建或更新项目:
PUT /items/{id}
如果项目已创建,我应该返回201 Created
吗?如果已更新项目,我应该204 No Content
吗?或者我应该为两个动作返回相同的状态吗?
答案 0 :(得分:4)
答案在RFC2616第9.6节明确说明:
如果创建了新资源,源服务器必须通过201(已创建)响应通知用户代理。如果修改了现有资源,则应该发送200(OK)或204(No Content)响应代码以表示请求成功完成。
答案 1 :(得分:3)
如果区别对客户不重要,请在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,那么您应该避免将该回复类型视为对客户的礼貌。