REST:缓慢操作的响应式UI?

时间:2011-12-05 17:00:49

标签: rest progress-bar

我需要帮助为具有进度条的应用程序创建RESTful设计。

想象一个应用程序,其中一个资源需要很长时间(1分钟以上)来响应HTTP GET(在我的情况下,我正在扫描网络中的设备)。我希望客户端显示一个进度条,指示GET操作需要多长时间,但为了使其正常工作,服务器需要为它们提供操作的时间估计。

鉴于操作缓慢:

HTTP GET /devices

什么是提供时间估算的RESTful方式?我不认为我可以使用:

HTTP HEAD /devices

因为HEAD应该返回与GET相同的值减去身体(我认为)意味着我必须运行我试图避免的同样长的操作。有什么想法吗?

2 个答案:

答案 0 :(得分:8)

第二个想法,我想我会选择incremental response。根据{{​​3}},异步操作最好用HTTP 202表示。

  1. 客户端发送HTTP POST /devices
  2. 服务器响应HTTP 202 Accepted. Location: /queues/32194532
  3. 引用这本书:
      

    异步操作正在进行中,客户端可以   对该URI发出GET请求以查看它是如何进行的 - 即获取当前状态   “工作”资源。操作完成后,任何结果都将可用   作为这种资源的代表。一旦客户端完成了读取结果,它就可以   删除作业资源。客户甚至可以通过取消操作   过早地删除它的工作。

  4. 引用RESTful Web Services:当请求的进程仍处于待处理状态时,作业应返回200 OK。响应应描述该过程的待定状态。
  5. 引用https://stackoverflow.com/a/5081246/14731:处理完成后,作业应返回201 CreatedGET/PUT/POST情况下的响应应包含所请求/创建/更新资源的位置。
  6. 引用这本书:
      

    有一个皱纹。因为每个启动异步操作的请求都会产生   服务器创建一个新资源(如果只是一个临时资源),这样的请求既不安全   也不是幂等的。这意味着您无法使用GET生成异步操作,   删除,或(通常)PUT。您可以使用的唯一HTTP方法,仍然尊重   统一界面是POST。

答案 1 :(得分:2)

也许只是创建一个单独的“进度”资源?

GET /progress/foo