我需要帮助为具有进度条的应用程序创建RESTful设计。
想象一个应用程序,其中一个资源需要很长时间(1分钟以上)来响应HTTP GET(在我的情况下,我正在扫描网络中的设备)。我希望客户端显示一个进度条,指示GET操作需要多长时间,但为了使其正常工作,服务器需要为它们提供操作的时间估计。
鉴于操作缓慢:
HTTP GET /devices
什么是提供时间估算的RESTful方式?我不认为我可以使用:
HTTP HEAD /devices
因为HEAD
应该返回与GET
相同的值减去身体(我认为)意味着我必须运行我试图避免的同样长的操作。有什么想法吗?
答案 0 :(得分:8)
第二个想法,我想我会选择incremental response。根据{{3}},异步操作最好用HTTP 202表示。
HTTP POST /devices
HTTP 202 Accepted. Location: /queues/32194532
异步操作正在进行中,客户端可以 对该URI发出GET请求以查看它是如何进行的 - 即获取当前状态 “工作”资源。操作完成后,任何结果都将可用 作为这种资源的代表。一旦客户端完成了读取结果,它就可以 删除作业资源。客户甚至可以通过取消操作 过早地删除它的工作。
200 OK
。响应应描述该过程的待定状态。201 Created
。 GET/PUT/POST
情况下的响应应包含所请求/创建/更新资源的位置。有一个皱纹。因为每个启动异步操作的请求都会产生 服务器创建一个新资源(如果只是一个临时资源),这样的请求既不安全 也不是幂等的。这意味着您无法使用GET生成异步操作, 删除,或(通常)PUT。您可以使用的唯一HTTP方法,仍然尊重 统一界面是POST。
答案 1 :(得分:2)
也许只是创建一个单独的“进度”资源?
GET /progress/foo