首页 > 解决方案 > 使用分页从 Web API 接收所有结果

问题描述

我需要使用 Web API 连接到服务器并接收所有条目。然而,服务器最多只提供 100 个数据条目(分页),并提示如何获取下一批。使用 WSO2 EI 实现这一点的正确方法是什么?

在这里使用常规调解员似乎对我不起作用。我尝试使用 Script 调解器并在 Ruby 中执行请求(或者更准确地说是 WSO2 正在使用的 JRuby 包) - 但我需要使用 Ruby Gem 来处理 JSON(这似乎不适用于我)。

WSO2 EI 是否也可以使用 Ruby Gems?或者谁能​​想到我的问题的另一种解决方案(这不一定涉及使用 Java 编写自定义中介)?


示例 API 响应(一次限制为 2 个条目)

{
  "result": {
    "data": [
        {
            "id": 1,
            "title": "Test"
        },
        {
            "id": 2,
            "title": "Test 2"
        }
    ],
    "cursor": {
        "limit": "2",
        "after": "2",
        "before": null
    }
  }
}

cursor.after是此查询中最后一个数据的 ID 。使用参数 after=2 调用 HTTP URL 将选择接下来的 2 个条目。如果没有新条目cursor.afternull.

标签: wso2jrubywso2ei

解决方案


我会尝试一个调用 api 并存储结果的序列,如果 cursor after 不为 null,则调用自身。在第二次迭代中,它将使用游标值调用 api,将结果添加到前一个结果等,直到 cursor.after 为空。

另一种选择是嵌套克隆,每次 cursor.after 不为空时,您都会在其中不断创建新克隆。然后使用聚合中介来收集所有响应。


推荐阅读