返回身体和Http 204状态是否有效?

时间:2012-02-07 11:49:35

标签: http odata http-status-codes

我们目前正致力于OData标准:

http://www.odata.org/developers/protocols/operations

根据此标准,如果对数据执行PUT操作,则应返回204状态代码。标准说:

  

处理PUT请求服务器时返回状态204(无内容)   表示成功,不需要回应机构。

现在,根据其他人在其他地方读到的内容,有些地方声称,如果你要返回204,你绝对不应该回复一个反应机构 - 这不是一个是否需要的问题。

问题是我们需要返回一个身体。在这种情况下,我们正在对一批项目执行更新查询,并且部分成功(即一些更新,一些不更新)是可能的。我们想告诉客户这些失败是什么,而响应机构是我能想到的唯一方法。

那么这样做的“正确”方法是什么。我应该甩掉W3C并返回身体吗?或者我应该诋毁OData并返回不同的响应代码?还是有另一种可能吗?

4 个答案:

答案 0 :(得分:6)

对PUT的204响应不是OData服务器的强制要求(请注意,odata.org不是标准参考,MS-OData文档是)。您可以使用body返回200,在这种情况下,您返回的正文应该是更新实体的序列化(在服务器应用更新之后)。事实上,在OData V3中,我们现在支持Prefer标头,它正是这样做的。客户端可以包含带有PUT请求的Prefer标头,并要求服务器以200和更新的实体进行响应。

答案 1 :(得分:5)

我认为你不能返回内容,应该考虑返回一个标题来指示部分完成的命令。

规范说明

204响应绝不能包含消息体,因此总是在头字段后面的第一个空行终止。

您可能还希望采用批处理方式http://www.odata.org/developers/protocols/batch

答案 2 :(得分:0)

除非操作完全成功,否则不应返回204.

答案 3 :(得分:0)

为PUT返回204似乎很奇怪。我一直认为204与DELETE配对。文本“无内容”表示资源不再在服务器上。 PUT与删除资源无关,因此不应使用204. 204也是成功代码,因此在100%成功时应该使用。