首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确设计API预取系统

问如何正确设计API预取系统
EN

Software Engineering用户
提问于 2021-12-03 18:25:53
回答 1查看 188关注 0票数 0

我正在为web服务创建一个API。这个API中有几个端点需要一些时间(比如+5分钟)来计算,所以我正在创建一个预取系统,它每隔一段时间就会调用这个端点并缓存结果,当用户调用这个端点时,他们将得到缓存的响应,而无需等待很长时间。所有这些端点调用的函数将做三件事:

  1. 进行一些外部API调用来获取原始数据。
  2. 处理原始数据(这需要大量时间)
  3. 将处理过的数据存储在DB中并返回

我对这个端点有很多问题,因为每次这个预取系统出现故障或任何问题时,它们都会暴露给所有用户,如果一个用户提出请求,并且没有缓存的响应,那么端点将开始计算,这需要花费大量的时间。我不知道该如何处理这个问题,我可以添加一个参数prefetch来查询和处理数据,如果数据是从预取系统调用的,否则只需查询数据库中存储的已处理数据,如果DB中没有数据,它将返回一个空的响应,但我认为这比现在发生的情况要好得多。

下面是Python中给定端点的函数示例:

代码语言:javascript
复制
@cache
def calculate_weather():
    # Call some APIs and do some operations
    # Store the processed data in DB
    # return the processed data

这就是我想要做的:

代码语言:javascript
复制
@cache
def calculate_weather(prefetch):
    if prefetch:
        # Call some APIs and do some operations
        # Store the processed data in DB
    else:
        # Get the processed data from DB
    # return the processed data

在第二个示例中,API端点调用的函数将具有一个布尔参数prefetch,该参数仅在调用函数时才等于True。我认为这样可以解决这个问题,但也许我还能做些什么,有什么建议吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2021-12-05 10:06:36

井

  1. 我觉得你应该有两个不同的终点。预取系统的端点,以及用户将调用的另一个端点。显然,它们受到了不同的对待,因此它们应该有自己的方法。
  2. 可能有更好的方法来处理这个特别长的响应时间问题。在你的使用程序中,客户大多都在访问缓存.为什么不预先计算原始数据并将其保存在DB中。这取决于数据,但例如,您可以在创建它们的帐户时异步计算它。
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/434043

复制
相关文章

相似问题

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