REST:将应用程序错误映射到HTTP状态代码

重用这样的RFC HTTP状态代码是否被认为是一种好的做法 ,还是我们应该制作出完全符合我们特定错误原因的新代码?

我们正在围绕一些遗留应用程序设计Web服务API。

除了Response Body中的JSON / XML数据结构之外,我们还希望返回对Web缓存和开发人员有意义的HTTP状态代码。

但是如何将不同类型的错误映射到适当的HTTP状态代码? 团队中的每个人都同意以下内容:

GET / package / 1234返回404如果1234不存在,则返回404 Not Found

GET / package / 1234 / next_checkpoint返回400错误请求,如果“next_checkpoint”和1234有效,但next_checkpont在这里没有意义...

等等......但在某些情况下,事情需要比“400”更具体 - 例如:

POST / dispatch /?for_package = 1234返回412 先决 条件如果/ dispatch和包1234都存在,则失败 ,但是1234尚未准备好进行调度。


(编辑:HTTP / 1.1中的状态码和WebDAV分机中的状态码)


HTTP的RESTful使用意味着您必须保持API的统一。 这意味着您无法添加特定于域的方法(ala GET_STOCK_QUOTE),但这也意味着您无法添加特定于域的错误代码(ala 499 Product Out of Stock)。

事实上,HTTP客户端错误代码是一个很好的设计检查,因为如果您正确设计资源语义,HTTP错误代码含义将正确表示任何错误。 如果你觉得你需要额外的错误代码,你的资源设计可能是错误的。

一月


422不可处理的实体对于这样的场景是一个有用的错误代码。 看到这个问题什么http响应代码的休息服务放置方法当域名规则无效的额外信息。


GET / package / 1234 / next_checkpoint返回400错误请求,如果“next_checkpoint”和1234有效,但next_checkpont在这里没有意义...

这是考虑该URI的错误方式。

URI是不透明的,所以观察其中的一部分是“有效的”,而其他的不是从客户的角度来看没有任何意义。 因此,你应该'只是'返回一个404到客户端,因为资源“package / 1234 / next_checkpoint”不存在。

链接地址: http://www.djcxy.com/p/45425.html

上一篇: REST: Mapping application errors to HTTP Status codes

下一篇: Remove HTTP headers from a raw response