我正在开发一个RESTful API,其中http://server/thingyapi/thingyblob/1234返回与项目#1234相关联的文件(又名“blob”)以下载。但是可以在生成文件之前提出请求。它肯定会在以后的时间可用。

服务器中有一个批处理进程生成所有的blob。Item 1234已经存在,它的数据(除了blob)已经可用。服务器还没有生成1234的blob。

我不想返回404;那是指不存在的事物。它会存在,但还没有生成。有点像YouTube上的“处理”视频。我也不认为重定向代码是合适的;没有“其他”URL可以尝试。

在这种情况下,要返回的正确HTTP状态码是什么?


当前回答

409年冲突

指示由于请求中的冲突而无法处理请求,例如在多次更新的情况下发生编辑冲突。(维基百科来源。)

这可能是合适的。

如果你不能通过返回数据来满足请求-那么它不是一个成功。我认为202表明服务器已经排队请求,它将在以后完成请求。但在您的情况下,请求现在是数据,并且失败了。如果稍后重试,则是不同的请求。

我认为你有矛盾。你想要数据。但是它正在被编辑/更新。如果Thingy1234已经存在,并且之前已经成功下载,但现在处于编辑过程中,在编辑发生时不可用,也会出现这种情况。

其他回答

409年冲突

指示由于请求中的冲突而无法处理请求,例如在多次更新的情况下发生编辑冲突。(维基百科来源。)

这可能是合适的。

如果你不能通过返回数据来满足请求-那么它不是一个成功。我认为202表明服务器已经排队请求,它将在以后完成请求。但在您的情况下,请求现在是数据,并且失败了。如果稍后重试,则是不同的请求。

我认为你有矛盾。你想要数据。但是它正在被编辑/更新。如果Thingy1234已经存在,并且之前已经成功下载,但现在处于编辑过程中,在编辑发生时不可用,也会出现这种情况。

我建议202 -接受。从文档中可以看到:

请求已接受处理,但处理尚未完成。[…] 它的目的是允许服务器接受对其他进程(可能是每天只运行一次的面向批处理的进程)的请求。

另一个选项:503 -服务不可用。

501 -未实施

就像听起来一样。一个尚未实现,但暗示将来可用的特性。

这里有一个链接到5xx个错误的摘要。

我不想返回404;那是指不存在的东西。

URL不对应于某个东西的请求。

http://server/thingyapi/thingyblob/1234

客户端正在请求一个thingyblob,但它并不存在。如果真有,你会给他们的。

404.