首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公开用于异步系统的公共API

公开用于异步系统的公共API
EN

Stack Overflow用户
提问于 2021-10-14 11:01:05
回答 1查看 165关注 0票数 1

我们现在正在致力于,将我们的生产Rest 暴露给外部世界,以便让不同的第三方集成到我们的系统中。我们遇到的问题之一是,由于高规模和高性能的原因,许多API命令都是异步处理的,因此不能将结果直接返回给调用方

例如,一个deliver order命令可能需要一些时间才能完成,这意味着:

  1. 在响应体中,我们不能返回传递文件,因为它们还没有被处理,但是只有202个accepted状态。
  2. 我们不能保证在下一次调用get deliveries API时,这些都准备好了。

对于如何解决这个异步问题,我们几乎没有什么想法,但是我们想知道是否有一些关于异步系统公开API的最佳实践。它们中的大多数是202个状态代码,或者可能是一个command ID,它们可以在/注册到web钩子上,这看起来很麻烦。

客户端使用这些APIs来理解它是可以接受的吗?需要时间来执行它们所执行的操作吗?,并且同步响应并不总是可用的?

EN

回答 1

Stack Overflow用户

发布于 2021-11-05 13:33:53

有一些很好理解的模式用于在HTTP上公开长期运行的异步操作.如何进行这一工作将取决于您的具体需求,以下是一些注意事项:

  1. 短轮询。在这种模式中,您有一个"start“HTTP,它返回HTTP 202和异步操作的唯一标识符。然后,您有一个“查询”HTTP,它接受该唯一标识符,并使用操作状态进行响应。这取决于调用方决定调用“查询”API的频率,但是一般来说,异步操作完成和调用者发现它的那一刻之间会有一个滞后。这种模式的一个例子是AWS的Cloud日志、Insigts、StartQueryGetQueryResults API。
  2. 长轮询。在这种模式中,“查询”HTTP是一个HTTP长轮询,这意味着服务器将一直打开它,直到操作完成,或者最长时间已经过去(通常少于45秒)。如果HTTP长轮询在异步操作完成之前返回,则调用方将立即发出新的“查询”操作。对于您来说,这种模式通常实现起来更复杂,资源更密集(保持TCP连接打开),但会降低调用方发现操作竞争的延迟。
  3. Websockets.在此模式中,调用方创建一个持久的web钩子连接,以启动异步操作并等待其完成。这提供了通知调用方完成任务的最低延迟,但超出了常规HTTP的RPC语义的“面包和黄油”,因此在调用方需要更复杂一些。
  4. Webhooks.有些系统选择公开webhooks,以通知客户异步发生的重要事件。根据异步操作的持续时间,这可能是正确的模式。例如,条纹经常使用钩子。通知客户支付状态的变化。

除了异步操作的处理之外,在从您的系统公开HTTP时还有许多其他注意事项还具有帮助人们与应用程序集成的想法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69569547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档