【问题标题】:How to handle rest api timeout如何处理rest api超时
【发布时间】:2017-11-25 03:56:50
【问题描述】:

我想创建一个 POST api,它在后端进行一些处理并向客户端返回响应。不幸的是,处理很耗时,客户不能等到那个时候。

我想到的一个解决方案是,我会将请求推送到队列中并向客户端发送成功响应。在后台,工作人员可以处理来自队列的消息。

但问题是,如果操作失败了怎么办,即当worker处理消息并且结果是无效请求时,我该如何通知客户端?

【问题讨论】:

    标签: rest api asynchronous


    【解决方案1】:

    首先,考虑如何在网络上实现此功能。

    用户会点击某个表单的链接,填写并提交;表单的描述会告诉 Web 浏览器使用 POST 方法,浏览器会按照指定的过程来获取表单元素并构建将由您的 Web 端点接收的请求。

    您的端点会验证请求,将数据推送到队列,然后发送回客户端...什么?

    可能是一条 html 消息,上面写着“您好,我们收到了您的请求;已为其分配了跟踪号 12345。我们预计您的结果将在 15 分钟内准备好;有关进一步的更新,请访问此页面。”

    该页面将表示为超链接;指向另一个能够报告请求状态的端点的 url。由于这是一个安全的操作,GET 作为方法是有意义的,因此端点所需的跟踪号和其他信息将被编码到链接中。

    那个端点会反过来回复一个类似的页面;对所取得进展的描述、对可能准备就绪的时间的估计、获取更新的链接。

    最终,工作完成,端点回复一条消息,宣布工作已完成,这里有一个链接可以找到结果。

    如果出现问题,可以使用同一端点通知客户端发生了什么问题,以及可以采取哪些纠正措施。

    制作该协议的机器可读版本,并且您拥有一个 REST API。

    获取消息中嵌入的元数据,并将其提升到响应标头中,您就有了一个 REST api。

    【讨论】:

    • 客户端是一个应用程序,当应用程序启动时将显示一个插页式/横幅,并带有 2 个 CTA:接受和拒绝。如果用户接受,则需要一些时间来处理,所以我想要向用户显示成功,但如果处理失败,再次向用户显示横幅。想要避免使用不同的 api 进行状态跟踪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2019-03-22
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多