当前位置: 首页 > 知识库问答 >
问题:

如何优化多次调用外部API并响应结果列表的rest API响应?

岑元徽
2023-03-14

我编写了一个rest API,它接受一个列表请求(这个列表的大小是动态的)。

现在我的API所做的是,对于列表中的每个项目调用一个外部API,并用所有响应的集合进行响应。

请参考下面的流程图:

现在这个过程非常耗时,而且响应时间太长。

注:

>

  • 这必须是一个同步过程。

    我们不能在这里实现分页。

    此外,我们不想使用多线程,因为如果项目数量太少,那么多线程可能是一种过度使用,如果项目数量太多,那么可能会占用大量资源。

    那么,我们能做些什么来缩短响应时间呢?

  • 共有1个答案

    融渊
    2023-03-14

    对于您的问题的解决方案,我建议使用反应式微服务,即如何开发非阻塞同步REST API和异步事件驱动服务。

    传统上,作为Java开发人员,我们习惯于使用阻塞I/O实现同步通信,例如,通过HTTP的RESTful JSON API。使用阻塞I/O意味着从操作系统为请求的长度分配一个线程。如果并发请求的数量增加,服务器可能会耗尽操作系统中的可用线程,导致从更长的响应时间到服务器崩溃等问题。使用微服务架构通常会使这个问题变得更糟,其中通常使用协作微服务链来服务请求。服务请求所涉及的微服务越多,可用线程耗尽的速度就越快。

    如果首选同步编程模型,请使用反应式框架,该框架可以使用非阻塞I/O执行同步请求,而无需在等待响应时分配线程。这将使微服务更易于扩展,以便处理增加的工作负载。

     类似资料:
    • 由于某种原因,Api响应时设置了与我发送的坐标不同的坐标。我调试了应用程序,调用api的结果与在JSON文件中返回的结果不同。例如发送的: http://api.openweathermap.org/data/2.5/weather?q=lat=51.89689166666667&lon=-8.486315 那些返回的 > {“COORD”:{“LON”:24.76,“LAT”:60.15},“W

    • 我已经用Spring开发了一个REST API条目,它在Elasticsearch中执行搜索,现在我想返回ES找到的任何结果作为响应。我不关心搜索结果,也不知道其中的JSON结构。我只想把它还给客户。 我希望这样的事情能奏效: 但最后一行有一个编译错误,因为两个OutputStreams不兼容。所以我的问题是,将Elasticsearch的结果与Spring的响应连接起来的最简单的方法是什么?

    • 问题内容: 我正在实现一个支持部分响应的Web API。 给定班级用户 序列化所有属性时,Json格式化程序效果很好,但是我无法在运行时对其进行修改以告诉它忽略某些属性,具体取决于查询参数“字段”。 我正在使用JsonMediaTypeFormatter。 为了自定义格式化程序,我遵循了http://tostring.it/2012/07/18/customize-json-result-in-w

    • 问题内容: 我们正在研究使用Akka-HTTP Java API-使用路由DSL。 目前尚不清楚如何使用路由功能来响应HttpRequest。使用无类型Akka演员。例如,在匹配Route路径后,我们如何将请求传递给“ handler” ActorRef,该ActorRef随后将以异步方式通过HttpResponse进行响应? 类似的问题被张贴阿卡用户的邮件列表上,但没有后续的解决方案,例如- h

    • 我有一个项目使用以下代码调用componentDidMount()上的API服务 我的组件将过滤器从redux存储区传递到API调用。 但是,如果过滤器通过另一个组件发生变化怎么办?我似乎找不到正确的生命周期方法来在发生这种情况时重新调用api。

    • 我有一个短信api在PHP,我打电话发送短信。我通过一些json和一个url回调来获得响应状态,短信被发送。 之后服务器调用我的回调url,但我不能得到响应体。$_GET和$_POST是空的...留档不存在。它应该有一些json。有人能帮帮我吗?提前感谢