API:用于多个项目的HTTP状态代码发现错误?

时间:2016-09-26 21:28:31

标签: rest api http-status-codes

假设有一个查找API端点。响应可以成功(200),找不到(404),...在我的情况下找到多个项目是错误。哪个HTTP状态代码可以描述多个项目发现错误最好?

2 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。如果它是用于查找的API调用,并且您得到多个结果,我实际上期望带有结果数组的200代码。

但是如果请求本身格式错误,以至于它不清楚客户端要求的是什么,那么您可以发送400错误请求http状态代码。

另请查看207多状态代码,因为这可能实际上更接近您所寻找的内容。您可以提供请求和回复示例吗?

答案 1 :(得分:0)

  

假设有一个查找API端点。响应可以成功(200),找不到(404),...在我的情况下,找到的多个项目是错误。哪个HTTP状态代码可以描述多个项目发现错误最好?

服务器完全理解请求,但无法提供符合合同部分的表示。

所以正确的错误代码将在5xx范围内。

  

状态代码的5xx(服务器错误)类表示服务器知道它已经错误或无法执行所请求的方法。

如果没有专门的5xx错误代码,则应使用500

  

500(内部服务器错误)状态代码表示服务器遇到意外情况,无法完成请求。

迈克尔·克罗帕特在Stop Making It Hard中列举了很多选项。他对502

进行了有趣的观察
  

我可以告诉你,如果只有我们区分了502 Bad Gateway(一个上游问题),而不是将它与500内部服务器错误混淆,我们就可以节省数小时的调试时间。

“网关”的现代定义可以在RFC 7230 section 2.3(中介)中找到。

  

“网关”(例如“反向代理”)是充当出站连接的原始服务器但是转换接收的请求并将它们转发到另一个或多个服务器的中介。网关通常用于封装传统或不受信任的信息服务,通过“加速器”缓存提高服务器性能,并在多台计算机上启用HTTP服务的分区或负载平衡。

     

适用于源服务器的所有HTTP要求也适用于网关的出站通信。网关使用它所需的任何协议与入站服务器通信,包括超出本规范范围的HTTP的私有扩展。

非常非常粗略,500是“我的坏”,其中502/504指向其他地方。

  

你会为我的案子使用什么错误代码?

根据你所描述的内容,500。这适用于“我对此资源的代表是腐败的。”

合理的替代方案是502,适用于“此资源的上游表示已损坏”。

在任何一种情况下,错误的受众都是内部的(客户端无法做任何事情来纠正问题。您的支持团队可能无法对状态代码之间的区别做任何有用的事情)。您可以合理地认为问题是上游的事实是客户不感兴趣的实施细节(因此500所有内容)。或者,您可以争辩说您的API是一个网关,它可以转换收到的请求并将它们转发到另一个服务器,因此状态代码应该是因为问题出在您的商店,而不是您的api。

所以它归结为“当跟踪我们在api中遇到的错误数量时,我们是否要将这类问题与内部抛出的异常区分开来”?

权威指导似乎缺乏;选择一种方法,记录你的理由并发货。