首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在REST API中为“尚未就绪,稍后再试”选择HTTP状态代码?

如何在REST API中为“尚未就绪,稍后再试”选择HTTP状态代码?
EN

Stack Overflow用户
提问于 2012-03-21 04:49:23
回答 8查看 70.6K关注 0票数 179

我正在开发一个blob应用程序接口,其中http://server/thingyapi/thingyblob/1234返回与要下载的东西#1234相关的文件(也称为“RESTful”)。但可能是在文件不存在于服务器中的时候发出请求,但最确定的是将在稍后的时间可用。在服务器中有一个批处理过程,它为所有的东西生成所有的斑点。Thingy 1234已经存在,并且其数据(除了blob之外)已经可用。服务器还没有生成Thingy1234的blob。

我不想返回404;这是对于不存在的东西。这是一个已经存在的东西,但是它的blob还没有生成。有点像正在“处理”的YouTube视频。我也不认为重定向代码是合适的;没有“其他”URL可以尝试。

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-03-27 17:47:41

我建议使用202 - Accepted。从documentation

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

票数 83
EN

Stack Overflow用户

发布于 2012-09-05 20:20:01

问题在服务器端:客户端发出了一个格式良好的请求,但服务器无法满足它。所以我倾向于使用“服务器错误”,5xx状态码。

Quoth (当前的RFC 7231标准,重点增加):

状态代码的5xx (服务器错误)类指示服务器知道它的出错或无法执行请求的方法。除非响应HEAD请求,否则服务器应发送一个表示,其中包含错误情况的解释,以及它是临时还是永久条件。

备注

  • "erred or is incapable performing the request":尽管它们的标题是“服务器错误”,但它们不仅仅适用于服务器错误或永久错误:这些代码适用于暂时不可用的资源,如您的。

在可用的代码中,我认为503, "Service Unavailable"是最合适的:

503 (服务不可用)状态代码指示服务器当前由于临时过载或计划维护而无法处理请求,这可能会在一段延迟后得到缓解。服务器可能会发送一个Retry After报头字段...建议客户端在重试请求之前等待适当的时间。

注意:

对于你的case.

  • "temporary过载来说,
  • “可能会在一些延迟后得到缓解”:对于你的情况来说,这并不是书生气十足的真实。但是,可以说,如果您的服务器速度快得多,当客户端发出请求时,批处理就已经完成了,因此这是一种“过载”:客户端请求资源的速度快于服务器使其available.
  • Retrying适合您的服务的速度,因此您的回复应该包含一个Retry-After值。您可以提供批处理下一次执行的预计完成时间或批处理的执行间隔作为值。

定义自己的5xx状态代码(例如,591),尽管是permitted,但具有错误的语义:

客户端必须理解任何状态代码的类,并将无法识别的状态代码视为等同于该类的x00状态代码

客户端会将您自己的状态代码视为500, "Internal Server Error",这是不正确的。

票数 76
EN

Stack Overflow用户

发布于 2015-12-28 20:58:57

我认为423 - Locked可以用于此目的:

423 (已锁定)状态码表示方法的源或目标资源已锁定。此响应应包含适当的前置条件或后置条件代码,例如“lock-token-submitted”或“no-conflicting-lock”。

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9794696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档