如何实现RESTful进度指示器?

jac*_*ack 5 rest hateoas

我希望我的API是RESTful

假设我已经使用POST启动了一个长期运行的Task,现在想知道进度了吗?

惯用的REST方法是什么?

每10秒轮询一次GET?

Eri*_*ein 9

对你的回应

POST /new/long/running/task
Run Code Online (Sandbox Code Playgroud)

应该包含一个 Location 标头。该标头将指向客户端可以点击以找出任务状态的端点。我建议您的回复类似于:

Location: http://my.server/task-status/15
{
    "self": "/task-status/15",
    "status": "running",
    "expectedFinishedAt": <timestamp>
}
Run Code Online (Sandbox Code Playgroud)

这样您的客户端就不必随意 ping,因为服务器会提示它何时返回。稍后GETs to/task-status/15将返回更新的时间戳。这使您不必盲目轮询服务器。当然,如果服务器对完成处理任务需要多长时间有一些想法,这会更好。