从REST-ful服务中挑选HTTP状态代码以查找错误

时间:2011-05-11 19:19:33

标签: rest

当客户端调用我的REST-ful服务时,它需要知道响应是否来自“来自我”,或者是来自包含Web服务器的诊断是否发生了可怕的事情。

一种理论认为,如果我的代码被调用,它应该总是返回一个HTTP OK(= 200),并且我必须返回的任何错误应该只在我返回的数据中表示。毕竟,这是我的代码获得响应,而不是裸浏览器。

有点不言而喻,如果我使用REST直接通过浏览器生成HTML读取,如果出现错误,我绝对必须返回错误代码。在我关心的情况下,它总是Javascript或Java来解释响应的内脏。

另一种可能性是存在一些HTTP状态代码系列,我可以高度放心地返回它/它们永远不会被周围容器中的问题生成。是这种情况吗?

2 个答案:

答案 0 :(得分:17)

我使用以下内容:

获取

  • 200 OK
  • 400 Bad Request(当输入标准不正确时)

发表

  • 202接受(通过授权方式退回)
  • 401未经授权(也通过授权返回)

  • 201已创建(创建新资源时;我还设置了位置标题)

  • 400错误请求(当创建新实体的数据无效或事务回滚时)

<强> PUT

与POST相同

  • 201确定
  • 400 Bad Request

删除

  • 200 OK
  • 404 Not Found(与GET相同)

答案 1 :(得分:1)

我不知道如何避免某些容器返回像404这样的代码。

4xx代码用于处理客户端错误以及可能是一些详细描述问题的实体(因此意味着两种方法的组合)。由于REST依赖于HTTP以及状态和方法的相应语义,因此在任何可能的情况下总是返回200是违反此原则的。

例如,如果您有http://foo.com/bar/123之类的请求代表bar资源id=123并且您返回200包含一些内容,那么客户端就没有机会弄清楚这是否属实是预期的反应或发生的某种错误。因此,应该尝试将错误条件映射到状态代码,例如REST: Mapping application errors to HTTP Status codes中所述。