我需要帮助为具有进度条的应用程序创建RESTful设计.
想象一个应用程序,其中一个资源需要很长时间(1分钟)来响应HTTP GET(在我的情况下,我正在扫描网络中的设备).我希望客户端显示一个进度条,指示GET操作需要多长时间,但为了使其正常工作,服务器需要为它们提供操作的时间估计.
鉴于操作缓慢:
HTTP GET /devices
什么是RESTful方式为它提供时间估计?我不认为我可以使用:
HTTP HEAD /devices
因为HEAD
应该返回与GET
减去身体相同的值(我认为)意味着我必须运行我试图避免的同样长的操作.有任何想法吗?
第二个想法,我想我会选择增量响应.根据RESTful Web Services,异步操作最好用HTTP 202表示.
客户发送 HTTP POST /devices
服务器响应 HTTP 202 Accepted. Location: /queues/32194532
引用这本书:
异步操作现在正在进行中,客户端可以向该URI发出GET请求,以查看它是如何进行的,即获取"作业"资源的当前状态.操作完成后,任何结果都将作为此资源的表示形式提供.一旦客户端完成读取结果,它就可以删除作业资源.客户甚至可以通过提前删除其工作来取消操作.
引用/sf/ask/17360801/:200 OK
当请求的进程仍处于挂起状态时,作业应返回.响应应描述该过程的待定状态.
引用/sf/ask/17360801/:作业应201 Created
在处理完成后返回.响应情况GET/PUT/POST
应包含所请求/创建/更新资源的位置.
引用这本书:
有一个皱纹.因为每个启动异步操作的请求都会使服务器创建一个新资源(如果只是一个临时资源),这样的请求既不安全也不是幂等.这意味着您不能使用GET,DELETE或(通常)PUT生成异步操作.您可以使用并且仍然尊重统一接口的唯一HTTP方法是POST.