Я очень новичок в RxJava, и я все еще пытаюсь понять поток данных, но я хочу знать, возможно ли это, прежде чем отправиться в глубь кроличьей дыры.Клиент Джерси RxJava и коллекция конечных точек ресурсов
Цель: разъединить API ресурсов и позволяют им распространяться, а также обеспечивает гибкость для клиентов (веб/мобильных) для выборки данных на основе HREF ссылки, представленные только несколько «известных» API конечные точки.
У меня есть коллекция объектов JSON из одного API, где каждый json имеет поле «href», которое предоставляет ссылку на ресурс API, где можно получить полную информацию о данных. Например:
{
{
name: "assassins_creed",
href: "games/assassins_creedId123"
},
{
name: "bioshock",
href: "games/bioshockId456"
},
{
name: "clean_code",
href: "books/clean_codeId789"
},
{
name: "christmas",
href: "events/xmas001"
}
}
После получения этой коллекции, я хотел бы сделать вызов на соответствующий ресурс, используя этот Href значение и сохранить результат в коллекции, такие как массив JSON.
Я сопоставляю строки из списка объектов JSON в другой список, тогда я пытаюсь добавить их в наблюдаемый, чтобы асинхронно получать каждый ресурс в один и тот же ответ.
Я использую Jersey example в качестве ссылки, и я обеспокоен тем, что он не может использовать динамические ссылки href и возвращать ответ, который я бы хотел.
До сих пор я остановился на:
@Override
public List<JSONObject> getUsersDashboard(TokenModel token, String userId, @Suspended final AsyncResponse async) {
List<JSONObject> list = //Database request to get items for userId
List<String> hrefLinks = list.stream()
.map(e -> (String) e.get("href"))
.collect(Collectors.toList());
final Queue<String> errors = new ConcurrentLinkedQueue<>();
Observable.just(new JSONArray())
.zipWith(dashboard(token.getAccessToken(),"plhUrl", errors), (array, objects) -> {
array.add(objects);
return array;
})
.subscribe(response -> {
//errors?
async.resume(response);
}, async::resume);
}
private Observable<List<JSONObject>> dashboard(String access, String urlFragment, Queue<String> errors) {
Client client = ClientBuilder.newClient();
return RxObservable.from(client).target(urlFragment).request()
.header("Authorization", access)
.rx()
.get(new GenericType<List<JSONObject>>(){})
.onErrorReturn(throwable -> {
errors.offer(throwable.getMessage());
return Collections.emptyList();
});
}
Я был колеблющимся, чтобы поместить это в цикл для создания Наблюдаемые для каждой записи hrefLinks.
Как я могу получить ответы от нескольких ресурсов на один когерентный ответ для клиента?
getCollectionObjectObservable(): это метод в библиотеке дооснащения? – fakataha
После некоторой работы и помощи у меня есть работа, спасибо! – fakataha