首页 > 解决方案 > 如何使用 Javascript 从 API 获得部分大响应?

问题描述

我有一个很大的 API 请求,它给了我大约 1000 个结果。由于这个请求太大,我需要将响应分成几个部分,这样会更快。我想查询 1000 个结果,但要像客户端一样流式传输数据

在 API 请求中,您不允许输入任何参数,因此您可以检索全部帖子。响应是一个与 Wordpress 大致相同的 JSON(但它不是 Wordpress)

我已经尝试了从 10 到 10 个结果的相同请求,但我必须执行几个查询才能达到预期的行为。

我想得到的是来自 1000 个结果的请求。

    fetch(api)
    .then((data) => ...)
    .then((data) => {
        //When loaded first 10 records show
        //When loaded next 10 records show
        ...
        // Until the 1000
    })

有什么方法可以实现吗?

标签: javascriptwordpressasynchronouslazy-loading

解决方案


后端可以通过多种方式实现流/分页,而 JS 答案取决于您查询的后端支持哪种方式。

  • 通过请求参数进行分页
  • HTTP 范围请求(如何在允许搜索的情况下流式传输在线电影)
  • Websocket 流式传输(网络游戏如何在玩家获得实时更新的情况下工作)

因为您在评论中提到您正在查询 Wordpress,所以我将在这里举一个 Wordpress 的示例,但其他 API 可能有不同的处理流/分页的方式。

WordPress API 支持分页,如下所述:

https://developer.wordpress.org/rest-api/using-the-rest-api/pagination/

您需要做的是专门请求一个带有偏移量的页面以获取该部分结果,如下所示:

 /wp/v2/posts?per_page=100&offset=1000

这将获得帖子 #1000 之后的帖子列表,其中每个页面有 100 个结果。

对于其他 API,您需要提供更多详细信息,以便我们确定如何流式传输结果。


推荐阅读