【发布时间】:2020-08-21 04:57:46
【问题描述】:
在我的 web api 项目中,我有 /search 端点来根据用户输入搜索学术出版物。我正在对该搜索 ep 中的四个不同 api 进行搜索调用。这四个api都有它们的分页机制。我无法为我的 /search ep 调用者创建分页逻辑。
如何从搜索 ep 中获取 pageSize 和 pageNumber 作为参数,并从这 4 个 api 返回 pageSize 项目的数量。我会从这 4 个 api 中获取所有项目,并在每次调用中返回 pageSize 项目的数量,但我不想在每次调用中从 api 中获取所有项目。
例如, 我收到这样的请求:
/seach?pageNumber=1&pageSize=30
我将在搜索功能中执行以下操作:
var apiResult1 = GetApiOneResult(); // apiResult1 = { page : 1, pageSize: 10, total: 100, data: [...] }
var apiResult2 = GetApiTwoResult(); // apiResult2 = {page: 1, pageSize: 10, total: 50, data: [...] }
var apiResult3 = GetApiThreeResult(); // apiResult3 = {page: 1, pageSize: 10, total: 0, data: null }
在上述场景中搜索将返回 20 个项目,因为我的 apiResult3 没有数据,但我想显示 30 个数据。我可以调用 apione 2nd page 并获得 10 多个项目。如果我在客户要求第二页 (/search?pageNumber=2&pageSize=30) 时这样做,我不应该调用 apiOne 的第二页,因为我已经在第一页中展示了这一点。
这只是一种情况,我可能需要考虑更多的事情。那么我怎样才能最好只在我的后端代码中实现这个分页问题呢?
我知道这不是一个具体问题,但任何代码示例或可能已经创建的设计模式都会对我有所帮助。
【问题讨论】:
-
@ryyker 我正在使用 C#,但语言并不重要。我需要逻辑方面的帮助
-
如果 api 有分页逻辑,那么只需传递它们相同的内容,并在您的页面上分隔任何给定结果的来源。否则,您需要独立于您的页面跟踪每个源的分页状态,以便执行您想要的操作。
-
@RichardBarker 这就是我现在所做的,但在这种情况下,我无法在每个页面中显示相同数量的数据。