REST API:创建自定义HTTP响应代码是一种非常糟糕的做法吗?

时间:2014-08-28 10:43:04

标签: api rest http architecture conceptual

编写RESTful API以使用自定义HTTP响应代码(例如:

)时,这是一种不好的做法
  • 417 - 未提供密码
  • 418 - 数据库错误

API custom response codes

我看到有一个standard HTTP response codes列表。但是,通过查看Twitter's API,Twitter似乎会尝试在可用时返回标准HTTP响应代码,但是当它们无法将错误与标准HTTP响应对齐时,它们会返回自己的错误代码(如果我错了,请更正我)。

创建RESTful API时,响应代码(尤其是错误)的最佳做法是什么?对Twitter选择使用的做法有何评论?

2 个答案:

答案 0 :(得分:5)

是的,是的,这是不好的做法......主要是。

REST的一个原则是你使用基础协议,因为HTTP已经定义了一组很好的响应代码。

然而,并非所有情况都能得到完美的照顾。让Twitters'逮捕你的冷静',当请求有效时使用响应代码,由于请求太多而无法处理。

我没有看到另一个与之匹配的响应代码。另外两个选项是谎言,并告诉用户其他一些响应请求失败,或者给一个通用400'你做了一些不好的事情'(然后在正文中给出更详细的解释)。

我赞成使用通用X00代码,并使用标题或正文添加更多有关实际出错的详细信息。这至少符合标准并且不那么脆弱。

但请注意,获取现有错误代码并重新调整它是非常糟糕的。 404应始终仅用于“未找到”错误。不要开始使用它,因为用户无法在一天的这个时间发出请求。

答案 1 :(得分:5)

使用自己的代码时遇到的问题是:

  1. 您选择的代码可能会被正式分配给完全不同的代码,这可能会在将来破坏您的API。 (例如,将306与301进行比较)
  2. 中间人不知道您的代码意味着什么,因此无法优化任何内容。互联网运行良好,因为它是一个分布式系统,而不是端到端系统。
  3. 每个类别都有通用的响应,x00,如果没有更好的话,应该使用它。
  4. 您可以在响应正文中发送您自己的更具体的错误代码,或者(不是那么好)回复标题。不需要编写自己的代码。如果你真的发现了一些对互联网其他部分有益的东西,而且到目前为止还没有人想到过,你可以随时向IETF提交互联网草案(这很容易做到)。
  5. 但是,我不会把Twitter作为良好的互联网实践的光辉榜样。 :)