在 React 应用程序的服务器端等待一个漫长的过程

Waiting for a long process at server-side from a React app

我正在构建一个前端应用程序,它在服务器端启动耗时的进程。当流程完成时,哪种方法应该是通知客户端应用程序的正确方法?

为了避免连接超时问题,在这种情况下,最好让客户端检查进程何时完成。

在这种情况下,REST API 的最佳行动方案是 return 带有 202 (Accepted) 状态代码的响应。此状态码 means:

The request has been accepted for processing, but the processing has not been completed.

在此响应的有效负载中,您可以提供客户端可用于检查请求状态的端点,例如:

{
    "task": {
        "href": "/api/jobs/1234",
        "id": "1234"
    }
}

然后客户端可以使用提供的端点来检查处理请求的作业的状态。这些响应应包含 200 状态代码,并且可能包含如下有效负载:

{
   "job" : {
     "@uri" : "/api/jobs/1234" ,
     "id" : "1234",
     "job-state" : "SCHEDULED",
     "percent-complete" : "0",
     "scheduled-start-time" : "11-05-2020 01:31:00 PM GMT",
     "start-time" : "",
     "end-time" : "",
     "result": ""
   }
}

如果此作业的目的是生成新资源,您可以在上述有效负载中使用 result 键来包含指向新创建资源的 URL。同样,如果作业失败,您可以包含一个 error 键来指示它失败的原因。