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

Pla*_*der 4 architecture api rest http conceptual

编写RESTful API以使用自定义HTTP响应代码时,这是一种不好的做法,例如:

  • 417 - 未提供密码
  • 418 - 数据库错误

API自定义响应代码

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

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

the*_*man 5

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

REST的原则之一是您使用底层协议,因此HTTP已经定义了一组良好的响应代码.

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

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

我赞成使用通用X00代码,并使用标题或正文添加更多关于实际出错的细节.这至少符合标准并且不易碎.

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

  • 429 请求过多 (2认同)

Nic*_*nks 5

使用自己的代码的问题是:

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

不过,我不会把Twitter作为良好互联网实践的光辉典范.:)