我对RxJava非常陌生,我仍在尝试理解数据流,但我想知道这是否可能,然后再深入兔子洞。
目标:解耦API资源并允许其分布,同时为客户端(web/移动)提供灵活性,以便根据仅提供给少数“已知”APIendpoint的href链接获取数据。
我从一个API中收集了JSON对象,其中每个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示例作为参考,我担心它无法获取动态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();
});
}
我很犹豫是否将其放入for循环中,以便为每个hreflings条目创建可观察项。
如何将来自多个资源的响应转换为客户的单个一致响应?
平面图
运算符是您正在寻找的东西。您可以发出流中的href链接,以便在平面图运算符中将每个链接转换为一个新的可观察对象,该可观察对象将其结果传播到原始流中。我认为这正是您描述的行为。
编辑:改装库提供了很好的界面,可以从链接创建可观察的对象。要详细说明您的示例,首先需要使用map
操作符将集合对象转换为某种类型的Iterable。一旦你有了一个可变量,使用flatMap创建一个可观测的项目,这些项目属于可观测的,使用可观测的。from()。这将以单独排放的形式排放链接。然后再次使用flatMap将每个链接转换为可观察的网络请求,该网络请求将发射转发回原始流。
getCollectionObjectObservable()
.map(result -> iterable) // transform the object into Iterable( ie. List )
.flatMap(iterable -> Observable.from(iterable))
.flatMap(link -> createRequestObservable(link))
.subscribe(result -> /* process the result of each item here */ )
我正在Ubuntu 16.04 LTS中使用Python 2.7.12。我正在通过以下链接学习如何使用boto3:https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-博托-3。我的疑问是何时使用资源、客户端或会话,以及它们各自的功能。
我试图将我的Spring应用程序作为发现客户端。但是当我添加以下依赖项时 GWT webapp因503服务不可用而无法启动。Netflix Eureka只能与Spring启动或Spring云应用程序一起使用吗?
客户端集成 CAT推出多种语言的客户端,基本覆盖了主流开发语言。 CAT目前支持::Java、C、Python、node、Go等语言的接入。详情请参考:传送门 注意所有的客户端均在lib目录下,Java客户端也是,Java客户端不再使用cat-client这个模块,这个客户端无任何依赖。 Java C C++ Python Go Node.js 其它语言客户端接入: .NET 客户端 项目地址 c
Summary A ClientSide Resource Manipulation vulnerability is an input validation flaw that occurs when an application accepts an user controlled input which specifies the path of a resource (for exampl
我试图从GraphDB查询资源。我创建了一个名为theOnto的存储库。在图形数据库工作台中,如果我从下拉列表中选择回购,然后查询资源,比如http://localhost:7200/resource/qLinkage/Program,那么它工作正常。这是有效的,因为为存储库名称设置了一些cookie。但是我想打相同的资源url,并获得所需的数据,而无需设置cookie。 这在许多公开可用的Gra
有没有办法在SOAPUI(免费)中配置一个测试用例、测试套件甚至项目级的测试中请求使用的资源/方法? 我们有以下用例: 相同的REST服务在不同的服务器上运行(可能是不同的版本),并且根据配置略有不同的资源路径。 例如或等。 我们希望能够针对这些不同的endpoint/资源组合运行我们的测试套件和测试用例。到目前为止,我们发现更改endpoint的唯一方法是在测试用例级别使用测试用例编辑器,并在测