我使用基于REST API的系统,其中有一些请求需要很长时间才能完成。我想给用户一个取消请求的选项。
答案 0 :(得分:4)
首先,支持
POST /requests
将返回对请求状态的引用
{
"id": 1234,
"self"": "/requests/1234"
"status": "Running"
}
然后添加对
的支持PUT /requests/1234
{
"status": "Canceled:"
}
如果请求尚未完成,客户将取消该请求。如果请求是创建其他类型的资源,那么执行POST /requests
而不是POST /myResource
,但仍然返回状态对象,并在响应中使用指向/ requests的指针。
然后,客户可以轮询/requests
以查看请求何时完成。
答案 1 :(得分:0)
首先,您需要使用多个线程,因为您的程序在发送请求时将处于暂停状态,因此您无法点击某些内容,直到它从保持状态恢复为止。
创建一个在后台调用其余API的线程,而不会挂起所有应用程序,并在点击按钮时终止该线程。
注意终止线程需要使用现在已经折旧的停止功能,因为在此过程中你不能中断线程或检查布尔值。
@Deprecated
public final void stop()
或者,您可以通过
使用HTTP请求调用的最长时间 HttpConnectionParams.setConnectionTimeout(httpParams, 30000);