2014-07-16 74 views
0

我不知道使用什么响应代码时请求是有效的,但没有结果,给定参数基于REST的响应状态码

的JSON返回的成功真/假和消息

当我做了GET并有一些数据我用:

200 HttpStatusCode.OK

但是在没有数据,我应该仍然使用OK,并返回JSON成功/消息或建议立即进行删除d我使用400 HttpStatusCode.BadRequest来表示请求中的内容不好。

+2

这取决于请求是否真的很糟糕,或者是否只是没有显示结果。如果没有结果返回HTTP状态码200(OK)和空的json成功消息,但是请求本身没有格式错误并且可以正确读取 –

+2

“HttpStatusCode.BadRequest”如何指示那里没有结果返回?非常误导。错误的请求是一个错误的请求 - 一些格式不正确的数据,不正确的输入值等等。想想那样 - 你会期望'List .Length'抛出'InvalidOperationException'如果列表为空? –

+0

请求很好,只是没有数据。可以说给我27人。但27人不是我的帐户的一部分或不存在。因此,请求不好,您的请求不是有效的数据。 –

回答

3

这取决于客户没有结果意味着什么。 通常缺乏数据仍然是http 200确定。

例如/employees

但是,对于某些情况下,您可能会返回 HTTP 404 Not Found。

特别是当客户期望特定资源存在时。

例如employees/update/32

通常任何其他响应代码(204等)虽然技术上有效和适合,可能会混淆客户端。 另外,如果请求没有错误,也应该不使用400错误请求。

+1

在'/ employees'示例中,我通常会返回200,其响应为[]'。 –

+0

@达芬两种都是可行的选择,如果你打算支持不同的客户,你的宽容/灵活性会更高一些。 –

1

如果操作成功,但实在是没有响应数据,使用状态204 NO CONTENT。如果预期的实体丢失,请返回404 NOT FOUND。如果出现某种内部错误,请返回500 SERVER ERROR

按照HTTP/1.1 spec

服务器已经履行了请求,但不需要返回 实体主体,并且可能要返回更新的元信息。 响应可能包含以 实体标题形式的新的或更新的元信息,如果存在,应该与 请求的变体相关联。

如果客户端是用户代理,则不应将其文档视图 从导致请求发送的文档视图中更改。此响应为 ,主要用于允许在没有 引起用户代理活动文档视图更改的情况下发生操作输入,但 应将任何新的或更新的元信息应用于当前位于用户代理活动视图中的文档 。

204响应不能包含消息体,因此始终由头字段后的第一个空行终止 。

+0

抬头:这可能会导致客户期待JSON回复的问题,但这并不是特例HTTP状态码204. –

+0

我不同意,因为没有内容返回无内容,因此我不能返回任何解释的JSON。 –

+0

正确..这只适用于操作成功的情况,但实际上没有数据要返回。如果出现某种错误,请使用其他响应代码。我已经为我的答案添加了说明。 – metacubed