该如何处理用户的一个可能非常耗时的资源创建,我并不能让用户等待 API 完成。
与其创建一个真正的资源,不如创建一个临时的。与其让 HTTP 返回 201(已创建), 不如返回 202 (被接受),它告诉客户端这个请求已经被服务器接受且理解,但资源 仍未被生成。通过 Location 头来发送临时的资源。
请求:
POST /blogs HTTP/1.1 <xml> blogdata </xml>
返回:
HTTP/1.1 202 Accepted Location: /queue/12345
这个地址可能用来存储关于真正资源的状态:一个关于几时会被创建,现在已经完成或者正在运行的 ETA(Estimated Time of Arrival,估计完成时间)。
当真正的资源被创建,临时资源可能返回一个 303 (see other)。这个头地址重定向于真正的资源。 客户端可以 [DELETE] 这个临时资源或者服务器会让这个资源失效并返回一个 410。