Получение всех результатов из веб-API с нумерацией страниц - PullRequest
0 голосов
/ 05 ноября 2018

Мне нужно подключиться к серверу с помощью веб-API и получить все записи. Однако сервер предоставляет максимум 100 записей данных (разбивка на страницы) и подсказку, как получить следующий пакет. Как правильно реализовать это с помощью WSO2 EI?

Использование штатных посредников здесь не работает. Я пытался использовать посредник Script и выполнять запросы в Ruby (или, если быть более точным, в пакете JRuby, который использует WSO2), - но я должен был бы использовать 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 - это идентификатор последних данных в этом запросе. Вызов HTTP URL с параметром после = 2 выберет следующие 2 записи. Если новых записей нет, cursor.after - это null.

1 Ответ

0 голосов
/ 05 ноября 2018

Я бы попробовал последовательность, которая вызывает API и сохраняет результат, и если курсор после не является нулевым, вызвать сам. Во второй итерации он вызывает API, используя значение курсора, добавляет результат к предыдущему результату и т. Д., Пока курсор.after не станет нулевым.

Другим вариантом будут вложенные клоны, в которых вы продолжаете создавать новый клон каждый раз, когда курсор. After не равен нулю. А затем используйте совокупный посредник, чтобы собрать все ответы.

...