java - 从 api 获取大量数据

标签 java api rest

<分区>

我正在调用一个返回超过 100 000 条记录的 Restful api。我如何在客户端处理如此大量的数据?我不想一次获取所有记录。

最佳答案

如果您是 restful API 的拥有者,那么请重新设计它以支持分页。并使用页码按较小的部分请求信息。

如果您不是 API 的所有者,则实现中介服务器端服务,其工作方式类似于具有分页支持的缓存。客户端使用此中介服务,发送带有页码的请求并获取较小的数据部分。


更新

假设您返回大量记录的服务被命名为“黑匣子服务”。

我建议创建额外的服务(让它的名字是:“中介服务”)从客户端获取所有请求,处理它们,通过向“黑盒服务”发送请求,缓存结果并将信息返回给客户端。

检查下图:

schema

假设中介服务地址为: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,但无法找到

java - 如何通过 Web 应用程序访问开箱即用的 Web 脚本(露天)

java - 最佳图像缩放库

api - 搜索公司apilinkedin

api - Telegram Bot - 发送信息消息