Rest 服务器找不到用户给定的外部资源时的HTTP错误代码

Rest 服务器找不到用户给定的外部资源时的HTTP错误代码,rest,http,Rest,Http,我们的图像板允许用户通过复制粘贴URL上传图像。客户端应用程序使用请求正文中给出的图像URL向我们的API发送POST请求。在本例中,我们的web服务接收POST请求并通过使用服务器端HTTP客户端从给定URL下载图像来处理它 在成功的情况下,服务会找到映像,下载它,并将其存储到服务器。该服务将HTTP 200返回给客户端 现在,如果找不到图像怎么办?如果下载尝试导致HTTP 404呢?我们应该使用什么HTTP错误代码来响应客户端 不适用,因为请求格式正确且所有参数都有效 不适用,因为虽然未找到

我们的图像板允许用户通过复制粘贴URL上传图像。客户端应用程序使用请求正文中给出的图像URL向我们的API发送POST请求。在本例中,我们的web服务接收POST请求并通过使用服务器端HTTP客户端从给定URL下载图像来处理它

在成功的情况下,服务会找到映像,下载它,并将其存储到服务器。该服务将HTTP 200返回给客户端

现在,如果找不到图像怎么办?如果下载尝试导致HTTP 404呢?我们应该使用什么HTTP错误代码来响应客户端

不适用,因为请求格式正确且所有参数都有效

不适用,因为虽然未找到图像URL,但已找到并提供请求URL

因为我们的服务器或上游服务器(源映像的服务器)没有任何问题,所以感觉不正确。用户只是碰巧键入了一个不存在的图像URL


在这件事上有什么经验吗?哪个错误代码最正确?

由于API确定了某些不可用的内容,因此其服务也不可用

状态代码503:Service Unavailable最适合您的情况。 根据报告:

由于服务器临时过载或维护,服务器当前无法处理请求。这意味着,这是一种暂时的情况,延迟一段时间后会得到缓解。如果已知,延迟的长度可以在Retry After标头中指示。如果没有在之后重试,客户端应该像处理500响应一样处理响应

或者,如果您的API支持一种传达错误的方式,例如告诉用户他提交的信息不正确,您可以使用此方法告诉用户外部资源不可用。这可能会更友好一些,并且可能会避免用户方面出现一些错误

由于客户端应用程序向您的API服务器发送POST请求,因此应根据收到的服务器生成响应代码。在您的情况下,这是您的API服务器


如果服务器从客户端应用程序接收到正确的信息,并且服务器确定请求有效,则应返回正确的代码,并包含正确的JSON或基于标头的错误消息。

首先,您应确定这是客户端错误4xx还是服务器错误5xx。从您的描述来看,这更像是一个客户端错误。客户端已请求从另一个资源创建一个资源,即不存在的图像URL

对于这种情况,没有完美的匹配,尽管可以对以下两种响应代码中的每一种进行说明:

HTTP 409冲突:来自:

由于与当前请求冲突,无法完成请求 目标资源的状态。此代码用于以下情况: 用户可能能够解决冲突并重新提交 请求

如果您认为目标资源不在坏状态映像中,这将适用于您的情况。如果有人在指定的URL处提供了一个图像,这将有效地将您的资源转换为有效状态

这也是一个很好的匹配,因为正如RFC所述,这段代码意味着用户可能能够解决冲突。在您的情况下,用户可以通过将图像发布到指定的URL来纠正这一点

HTTP 424依赖项失败:来自:

424失败的依赖项状态代码意味着该方法可能失败 无法对资源执行,因为请求的操作依赖于 在另一个操作中,该操作失败


这适用于您的情况,因为请求的操作依赖于另一个操作,而该操作失败。从属操作是将图像发布到其他URL。您所描述的情况是,依赖操作失败或未发生,也可以称为失败。

http错误代码是假定所有可能提供服务的页面都以某种方式存储在本地的

您的场景与该假设不匹配,因此,如果您没有找到适合您的账单的代码,也就不足为奇了

“未找到”场景实际上是一个应用程序错误,您应该在用户输入URL的表单上提供一条错误消息,或返回一个完全专用的错误页面或类似页面,从而通知用户该情况。或者选择一个http错误,并接受这样的想法,即无论发生什么,它都不适合

现在,如果找不到图像怎么办?如果下载尝试导致HTTP 404呢?我们应该使用什么HTTP错误代码来响应客户端

要记住的主要一点是:你试图愚弄客户,让他们认为你是一个网站——只是一个愚蠢的文档 可能响应某些内容编辑消息的nt存储

对于客户端来说,主要的通信手段是响应的主体。看

除响应HEAD请求外,服务器应发送一个表示,其中包含对错误情况的解释,以及错误是暂时的还是永久性的

状态代码是元数据:旨在让参与交换的通用组件有机会了解正在发生的情况示例:web浏览器不需要知道要识别服务器返回的响应所要求的页面,web浏览器在收到响应时要求提供凭据,web缓存条目,或否,取决于响应返回的状态代码

HTTP 400错误请求不适用,因为请求格式正确且所有参数都有效

是的,完全正确

我可能会使用,因为服务器收到的_文档没有问题,所有问题都与服务器实现的副作用有关

您可能会考虑另一种方法:。我收到了你的留言,我理解了你的留言,稍后我会再讨论。如果不需要同步产生副作用,可以推迟判断。这允许您执行诸如应用重试策略之类的操作

与此响应一起发送的表示应该描述请求的当前状态,并指向或嵌入一个状态监视器,该监视器可以向用户提供请求何时完成的估计

我以后再谈;如果你想知道事情进展如何,去问他->


因为202是非错误状态代码,所以它对缓存的影响不同于4xx或5xx。如果您已经在考虑缓存的问题,那么您需要考虑缓存的含义。

503似乎不合适。这不是由于过载或维护导致服务器无法处理请求的情况。服务器不会处理请求,只是不会创建新资源。此外,RFC声明,这是一种临时情况,延迟一段时间后将得到缓解。这与OP所描述的并不匹配。