私はRxJavaを非常に新しくしていますが、私はまだデータの流れを理解しようとしていますが、これが可能かどうかを知りたければ、ジャージRxJavaクライアントとリソースエンドポイントのコレクション
ゴール: APIリソースをデカップリングして配布できるようにするとともに、いくつかの「既知の」APIに提供されるhrefリンクに基づいてクライアント(Web /モバイル)にデータをフェッチする柔軟性を提供します。エンドポイント。
各JSONには、APIリソースへのリンクを提供する 'href'フィールドがあり、データの完全な詳細を取得できる1つのAPIからJSONオブジェクトのコレクションがあります。たとえば:
{
{
name: "assassins_creed",
href: "games/assassins_creedId123"
},
{
name: "bioshock",
href: "games/bioshockId456"
},
{
name: "clean_code",
href: "books/clean_codeId789"
},
{
name: "christmas",
href: "events/xmas001"
}
}
このコレクションを検索した後、私はそのようなJSON配列としてそのhrefの値を使用して、適切なリソースへの呼び出しを行うと、コレクションに結果を格納したいと思います。
私は、JSONオブジェクトのリストから別のリストにマッピングしています。そして、それらをObservableに追加しようとしています。これにより、各リソースを非同期に同じレスポンスに取り出すことができます。
私は参照としてJersey exampleを使用していましたが、私は動的hrefリンクを取れず、私が望む応答を返すことができないと懸念しています。私は、各hrefLinksエントリの観測を作成するためのループにこれを入れて躊躇した
@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();
});
}
:
は、これまでのところ私はで停止しました。
複数のリソースからの応答を、クライアントの単一の一貫性のある応答にするにはどうすればよいですか?
getCollectionObjectObservable():これはRetrofitライブラリのメソッドですか? – fakataha
もう少し仕事をして助けてもらえました。 – fakataha