<分区>
我正在调用一个返回超过 100 000 条记录的 Restful api。我如何在客户端处理如此大量的数据?我不想一次获取所有记录。
<分区>
我正在调用一个返回超过 100 000 条记录的 Restful api。我如何在客户端处理如此大量的数据?我不想一次获取所有记录。
最佳答案
如果您是 restful API 的拥有者,那么请重新设计它以支持分页。并使用页码按较小的部分请求信息。
如果您不是 API 的所有者,则实现中介服务器端服务,其工作方式类似于具有分页支持的缓存。客户端使用此中介服务,发送带有页码的请求并获取较小的数据部分。
更新
假设您返回大量记录的服务被命名为“黑匣子服务”。
我建议创建额外的服务(让它的名字是:“中介服务”)从客户端获取所有请求,处理它们,通过向“黑盒服务”发送请求,缓存结果并将信息返回给客户端。
检查下图:
假设中介服务地址为:http://www.yourserver.com/mediatorservice
那么这个中介服务的API应该支持以下参数:
pageNumber
- 请求页数
recordsPerPage
- 每一页的记录数
对此中介服务的示例请求如下所示:
http://www.yourserver.com/mediatorservice?pageNumber=1&recordsPerPage=25
此请求尝试从中介服务获取此页面 (recordsPerPage = 25) 上有 25 条记录的第一页 (pageNumber = 1)。
中介服务有自己的数据库用于缓存。如果客户端请求范围内的记录:1 .. 100 000
,那么中介服务会从“黑匣子服务”请求第一大块数据,并将这 block 数据存储在自己的数据库中。
所有其他连续请求都将使用中介服务数据库中的缓存数据 block 提供服务。
如果在 100 001 ...200 000
范围内有请求,则中介服务会获取另一个巨大的数据 block 并将其存储在自己的数据库中(如果之前没有这样做的话)。并使用这些存储的数据来满足来自客户端的请求。
根据信息的性质,可能需要以不同方式处理缓存信息。有些信息可能会缓存很长时间,有些则不能。
存在许多缓存 java 框架,检查它们以选择适合您需要的一个。
关于java - 从 api 获取大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25427588/
相关文章:
java - Selenium webdriver 壁虎错误 : The path to the driver must be set by webdriver. 壁虎
java - Gradle 2.2.1 尝试使用 gradle-2.1-bin
javascript - 我使用 Node.js 和 Express 实现 Restful API 的正确 url 路径是什么
spring - 如何使用 Spring MVC 在 post 方法中传递 List<String>?
java - 为我的 Python 代码 API 决定 RESTful 架构
mysql - Spring Boot MySQL REST 错误 - 需要一个名为 'entityManagerFactory'/'emf' 的 bean,但无法找到