【发布时间】:2017-11-25 03:56:50
【问题描述】:
我想创建一个 POST api,它在后端进行一些处理并向客户端返回响应。不幸的是,处理很耗时,客户不能等到那个时候。
我想到的一个解决方案是,我会将请求推送到队列中并向客户端发送成功响应。在后台,工作人员可以处理来自队列的消息。
但问题是,如果操作失败了怎么办,即当worker处理消息并且结果是无效请求时,我该如何通知客户端?
【问题讨论】:
标签: rest api asynchronous
我想创建一个 POST api,它在后端进行一些处理并向客户端返回响应。不幸的是,处理很耗时,客户不能等到那个时候。
我想到的一个解决方案是,我会将请求推送到队列中并向客户端发送成功响应。在后台,工作人员可以处理来自队列的消息。
但问题是,如果操作失败了怎么办,即当worker处理消息并且结果是无效请求时,我该如何通知客户端?
【问题讨论】:
标签: rest api asynchronous
首先,考虑如何在网络上实现此功能。
用户会点击某个表单的链接,填写并提交;表单的描述会告诉 Web 浏览器使用 POST 方法,浏览器会按照指定的过程来获取表单元素并构建将由您的 Web 端点接收的请求。
您的端点会验证请求,将数据推送到队列,然后发送回客户端...什么?
可能是一条 html 消息,上面写着“您好,我们收到了您的请求;已为其分配了跟踪号 12345。我们预计您的结果将在 15 分钟内准备好;有关进一步的更新,请访问此页面。”
该页面将表示为超链接;指向另一个能够报告请求状态的端点的 url。由于这是一个安全的操作,GET 作为方法是有意义的,因此端点所需的跟踪号和其他信息将被编码到链接中。
那个端点会反过来回复一个类似的页面;对所取得进展的描述、对可能准备就绪的时间的估计、获取更新的链接。
最终,工作完成,端点回复一条消息,宣布工作已完成,这里有一个链接可以找到结果。
如果出现问题,可以使用同一端点通知客户端发生了什么问题,以及可以采取哪些纠正措施。
制作该协议的机器可读版本,并且您拥有一个 REST API。
获取消息中嵌入的元数据,并将其提升到响应标头中,您就有了一个好 REST api。
【讨论】: