2011-10-25 119 views
1

我有一个REST操作。用户想要删除一个对象。要返回哪个HTTP响应状态

  • 如果发生数据库错误
  • response.getWriter()书面回应,如果发生IOException。

哪个状态代码(500,503等),我应该返回到客户端。(我是说哪个更方便?)

回答

3

500听起来最合适的位置,除非你知道它由于服务器过载。

如果response.getWriter()(或作家以后的调用)抛出IOException,那么我怀疑你是超出了能够有效地影响客户端反正收到的响应阶段...

+0

对于数据库特定的错误,你是否也建议500? – kamaci

+0

@kamaci:是的 - 客户通常不应该知道或关心后端技术,更不用说哪个位失败了。 –

+0

@JonSkeet如果数据库由于引用完整性约束而产生错误,那么这是一个可由客户端解决的问题,因此应该是400错误。 –

1

有ISN那么多500个代码,其中大部分代码都是meaning,而不是“数据库失败”/“ioexception发生”。请注意,您应该区分哪种数据库错误,例如删除一个不存在的对象(请记住检查DELETE语句的“受影响的行”),将导致404状态。

对于你的两个例子,你应该返回状态500.尽管如果response.getWriter()发生IO异常,它可能来不及返回一个错误,或者你无法到达客户端。

然后,看看twitter api以及this页面使用的响应代码。

0

如果这是一个临时错误,503是合适的,因为它通常意味着“稍后重试”。但我认为大多数数据库错误都属于这一类。在大多数情况下,通用500是最好的回应。有没有在500强榜单中的许多选项:由于

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error

如果这是一个错误的删除是一个无效的操作或类似的,403禁止的东西是我想要的使用:)

0

您没有向我们提供足够的信息来回答有关数据库错误的问题。如果数据库错误是由于违反参照完整性约束而引起的,那么您应该返回400错误,因为它是客户端的错误。

你担心什么样的数据库错误?

+0

即尝试查询数据库时发生错误,尝试连接数据库 – kamaci

+0

@kamaci好的。然后500是正确的。 –