【问题标题】:REST API Design - Async REST Client Vs Async REST APIREST API 设计 - 异步 REST 客户端与异步 REST API
【发布时间】:2022-12-11 14:53:35
【问题描述】:

我已经有了 REST API(用于系统到系统通信),这需要花费大量时间来处理。

我想要异步处理。我在这里看到两个选项:

  1. 为了使 API 本身成为异步的,它返回一个 LOCATION 标头,提供另一个 URI 来获取结果。

  2. 使客户端异步 - 使用异步 HTTP 客户端或 AsyncRestTemplate 等。

    我想知道在这种情况下有什么更好的方法,因为两者似乎都可以解决问题。

【问题讨论】:

  • 首先,您正在使用哪些技术堆栈?您检查过哪个过程最昂贵吗?为什么?您是否考虑过将处理长时间运行的请求作为在后台进行繁重计算的后台工作?在 python 中,我们主要使用芹菜。
  • @auvipy:我在使用 JAVA/Spring。我们有一些繁重的计算任务,这需要大量的努力来重构(并且可能不会带来太多性能优势)......所以我们想要寻找异步处理和非常权衡的选项,如果我们应该使客户端异步或使 api 本身异步...
  • 我认为在那种情况下你应该尝试 rabbitmq 后台任务处理。 roytuts.com/spring-boot-rabbitmq-work-queues-example

标签: rest http asynchronous httpclient asyncresttemplate


【解决方案1】:

您提到的每个选项都有一些优点和缺点,您在做出决定时可能需要考虑这些选项。

异步API

这种方式有很多好处,比如允许 API 并行处理请求,提高系统的整体性能和可扩展性。但是,这种方法也会增加 API 的复杂性,因为它需要 API 实现异步处理并为客户端提供获取请求结果的机制。

异步客户端

这种方法可以提供更简单、更直接的解决方案,因为它不需要对 API 本身进行任何更改。这种方法还可以提高系统的性能和可扩展性,因为它允许客户端并行处理多个请求并异步处理响应。然而,这种方法可能需要客户端实现额外的逻辑来处理异步处理和获取结果,这会给客户端增加一些复杂性。

概括

使 API 异步可以提供更好的性能和可伸缩性,但可能需要更复杂的实现,而使客户端异步可以提供更简单的解决方案,但可能无法提供相同级别的性能和可伸缩性。您需要权衡每种方法的优缺点,并根据您的要求和限制决定哪种方法最适合您的特定系统。

【讨论】:

  • 这里没有足够的建议。都是很好的解决方案,服务之间也可以互相调用。将结果返回给客户端的任何方法都是一般可能没问题除非您有不共享的特定限制。
  • @Evert:你在寻找什么样的约束?能否请您详细说明,以便我回答
【解决方案2】:

一般来说,最好让 API 本身异步,而不是依赖客户端异步。这是因为使 API 本身异步允许 API 的使用方式具有更大的灵活性。例如,客户端可以选择使用同步 HTTP 客户端来发出请求,并且仍然受益于服务器端的异步处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2017-08-11
    • 2018-03-04
    • 2019-06-17
    • 2020-09-18
    • 2021-08-13
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多