繁体   English   中英

构建需要很长时间才能响应的 API 的最佳实践是什么?

[英]What is the best practice for building an API that takes a long time to respond?

我正在构建一个 API 端点,它必须调用多个外部服务/数据库,我不希望我的用户必须等待这个过程发生,但是,这个过程的结果对我的用户来说是必不可少的。

我的第一个想法是将请求添加到队列并立即返回,然后在稍后的某个时间,用户可以查询不同的端点以获取结果。

有没有更好的方法来 go 关于这个? 是否应该有一个 webhook 响应而不是要求用户查询 API 两次?

我见过的三种主要方式:

  1. 客户端发送 API 请求并立即返回一个作业号。 然后,客户端可以每隔一段时间(每分钟左右,取决于通常的结果需要多长时间)发送带有该作业编号的不同 API 请求,以便检查进度。 在其中一项检查中,将完成工作并获取数据。

  2. 客户端建立webSocketsocket.io连接。 客户端通过该 websocket/socket.io 连接发送请求。 服务器开始处理结果。 结果完成后,会立即通过 webSocket/socket.io 连接将其发送回客户端。 然后客户端可以为其他请求保持 websocket/socket.io 连接连接或关闭连接。

  3. 使用服务器发送的事件 发送查询,然后当结果完成后,服务器可以在同一连接上将其发回。

我认为这三个之间没有“最佳实践”,因为每个都有一些优势和一些可能相关的其他用途。 轮询选项 #1 是最小的公分母,可以在任何情况下工作,但需要客户端的轮询策略并且可能有一些延迟(在客户端轮询之前准备好结果)。

选择#2 和#3 都非常有效,它们的通用技术也可能有其他用途。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM