【问题标题】:How to get top X number of items according to a property in a paginated API?如何根据分页 API 中的属性获取前 X 个项目?
【发布时间】:2021-08-08 00:35:22
【问题描述】:

请注意,这个问题故意含糊不清。 假设,我有一个返回书籍分页数据的 API。每页 100 个书籍对象 [此数据出现在标题中,如“总页数”。响应正文采用 JSON 对象列表的格式。

[
 {},
 {},
  .
  .
  .
]

假设 book 对象具有所有必要的数据,例如标题、描述、销售数量等。如何返回畅销的 n 本书[畅销 => 最高销量]? 您不能提供任何参数,例如

GET endpoint/orderby=popularity&order=desc

到此端点,您无法进行任何数据库查询优化。我们如何用纯代码解决这个问题? 如有任何想法或建议,我将不胜感激。

【问题讨论】:

  • 因此,您的问题与其余端点无关,因为必须在收到数据后 进行排序。因此,请提供带有示例数据的 sn-p 以及您尝试过的内容。注意:这听起来像是一个重复的问题。关于如何对对象数组进行排序有很多问答。
  • 我的想法是将所有内容存储在最大堆中并返回前 100 个。@trincot
  • 是的,可以。你试过了吗?
  • 目前,它可以工作,但我希望有人可以分享一个更有效的解决方案。
  • "RESTful" 没有告诉我们 API 中有哪些可用选项。

标签: mysql algorithm api rest endpoint


【解决方案1】:

由于端点接受的参数有限,您唯一的选择是获取所有页面(通过不断循环直到出错),然后在您的程序中自行排序。

如果上面的解决方案很慢,你可以通过将你的要求从return top-selling n number of books放宽到return a few top-selling books which are in the top X%来优化

【讨论】:

  • 我的想法和你的很相似。使用 maxheap 并返回 1st 100。您能否详细说明返回畅销书 n 数以返回前 X% 的几本畅销书
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多