我正在开发一个blob应用程序接口,其中http://server/thingyapi/thingyblob/1234
返回与要下载的东西#1234相关的文件(也称为“RESTful”)。但可能是在文件不存在于服务器中的时候发出请求,但最确定的是将在稍后的时间可用。在服务器中有一个批处理过程,它为所有的东西生成所有的斑点。Thingy 1234已经存在,并且其数据(除了blob之外)已经可用。服务器还没有生成Thingy1234的blob。
我不想返回404;这是对于不存在的东西。这是一个已经存在的东西,但是它的blob还没有生成。有点像正在“处理”的YouTube视频。我也不认为重定向代码是合适的;没有“其他”URL可以尝试。
在这种情况下,返回的正确HTTP状态代码是什么?
发布于 2013-03-27 17:47:41
我建议使用202 - Accepted
。从documentation
已接受请求以进行处理,但处理尚未完成。..。它的目的是允许服务器接受某个其他进程的请求(可能是一个每天只运行一次的面向批处理的进程)
发布于 2012-09-05 20:20:01
问题在服务器端:客户端发出了一个格式良好的请求,但服务器无法满足它。所以我倾向于使用“服务器错误”,5xx状态码。
Quoth (当前的RFC 7231标准,重点增加):
状态代码的5xx (服务器错误)类指示服务器知道它的出错或无法执行请求的方法。除非响应HEAD请求,否则服务器应发送一个表示,其中包含错误情况的解释,以及它是临时还是永久条件。
备注
在可用的代码中,我认为503, "Service Unavailable"是最合适的:
503 (服务不可用)状态代码指示服务器当前由于临时过载或计划维护而无法处理请求,这可能会在一段延迟后得到缓解。服务器可能会发送一个Retry After报头字段...建议客户端在重试请求之前等待适当的时间。
注意:
对于你的case.
Retry-After
值。您可以提供批处理下一次执行的预计完成时间或批处理的执行间隔作为值。定义自己的5xx状态代码(例如,591),尽管是permitted,但具有错误的语义:
客户端必须理解任何状态代码的类,并将无法识别的状态代码视为等同于该类的x00状态代码
客户端会将您自己的状态代码视为500, "Internal Server Error",这是不正确的。
发布于 2015-12-28 20:58:57
我认为423 - Locked可以用于此目的:
423 (已锁定)状态码表示方法的源或目标资源已锁定。此响应应包含适当的前置条件或后置条件代码,例如“lock-token-submitted”或“no-conflicting-lock”。
https://stackoverflow.com/questions/9794696
复制相似问题