2

我们有一个REST基于服务器的问题是一些资源需要很长时间才能创建 - 需要几分钟<10m。

问题是:在创建资源时,我在客户端上收到请求超时错误,而不是取回资源。

我想到了几种可能性

  • 使用请求创建资源POST并将其添加到 session/db,然后发送 GET 请求以取回资源。我不喜欢这个解决方案:它不是“REST”,我将不得不发送几个返回 404 的 get 请求,直到资源完全创建

  • 将我的服务器(Tomcat 7 和 Spring 3.2)设置为更长的会话超时时间 - 我真的不知道该怎么做。

  • 服务器有没有办法向客户端发送响应说“保持”,直到他返回最终答案?- 真的不知道该怎么做

  • 有没有办法向服务器发送一个简单地“等待”更长时间才能响应的请求?真的不知道该怎么做

围绕这个问题的最佳做法是什么?

谢谢

4

1 回答 1

1

如果您知道创建资源需要很长时间,请立即告诉客户。不要阻止他几分钟。

一种常见的方法是用状态码回答202 (Accepted)。添加Location带有 URI 的标头,该 URI 指向客户端可以轮询的第二个资源,以获取有关当前状态的更多信息。

这第二个资源应以 a 和当前状态回答200 (OK)(“仍待处理,请在 30 秒后重试”)。如果第一个资源的创建完成,则第二个资源应303 (See Other)在标头中使用 a 和第一个资源的 URI 来回答Location

于 2014-06-14T16:58:19.117 回答