【问题标题】:What/How can I optimize for my API?什么/如何优化我的 API?
【发布时间】:2016-12-01 20:11:38
【问题描述】:

这更像是一个架构问题。

我正在为一个移动应用程序设计一个 API(我们称之为 API 1),它将查询我的 API 以获取新文章。我将调用另一个向我返回原始新闻提要的 API(我们称之为 API 2)。

你问为什么根本需要 API 1? 好吧,它会做很多优化,比如精选版特定新闻,以这样的方式格式化它让移动设备更轻松、更轻松地吸收 Feed。

所以 API 2 向我返回 1000 多个提要,然后根据我的管理假设我有 500 个提要使用 API 1 发送。现在有了缓存,这一切都对我的后端有好处。问题在于移动设备(尤其是旧设备)。他们开始大汗淋漓地响应巨大的响应(Gzip 后 270kb)。

我的解决方案:分页:

我可以将 500 篇新闻文章拆分为 5*100 篇文章。应用程序可以请求页面 1、2、3、4 和 5。潜在缺点:当 API 1 发送新文章时,5*100 的拆分受到干扰。例如在移动设备上查看新闻提要:

第 1 条,

第 2 条,

..

第 99 条,

第 100 条

----页面结束----

第 101 条,

第 102 条,

现在 API 1 刷新提要后:

新文章 1,

新的第 2 条,

第 1 条,

第 2 条,

..

----页面结束----

第 99 条(重复),

第 100 条(重复)

第 101 条,

第 102 条,

解决此类问题的最佳做法是什么?

编辑 为了更好地了解这个问题,请考虑一个类似于 Apple 新闻或 Google 报亭的应用程序,并且有点类似于 Twitter 和 facebook 订阅源。

【问题讨论】:

    标签: api design-patterns architecture


    【解决方案1】:

    您可以为每篇文章分配一个唯一的 ID,例如一个 GUID,并将这些 ID 与文章本身一起公开给 UI。然后 UI 的请求看起来像“嘿 API 1,给我文章 #id 之后的下 100 篇文章”。然后 API 1 端点将在缓存的提要中查找指定的 #id 并检索接下来的 100 篇文章。

    【讨论】:

    • 感谢您的回答。但是不,这不是我想要的。是的,有页面,但这些页面在我的 API 1 响应的上下文中。应用程序 UI 将是一个连续滚动的提要。最新文章只会在拉动刷新事件等期间显示。
    • 关于“在请求第一页之前不要将新拉出的文章添加到显示列表中”。我喜欢这种方法,但是,API 2 响应被缓存,并且每 5 分钟更新一次,将易失性数据存储在内存中是违反直觉的。因此,如果新文章被拉取,我只需要维护一个上下文以根据我上次拉取的内容获取接下来的几篇文章。
    • 对不起,我帮不上忙。老实说,我仍然无法为问题建立一个一致的心理模型,因此您可能需要扩展问题描述,详细说明 UI、API 1 和 API 2 之间的交互是如何发生的。
    • 谢谢!重写答案希望这次能更好地理解问题。
    猜你喜欢
    • 1970-01-01
    • 2011-06-14
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多